Как мне "ASCII броню" мой MemoryStream? - PullRequest
2 голосов
/ 02 января 2012

Как мне ASCII броня поток памяти? Защита ASCII - это процесс кодирования двоичных данных в печатаемую строку ASCII. Это используется, например, в шифровании.

Есть ли какой-нибудь стандартный способ сделать это, также с поддержкой декодирования, в C #? Как API? Иначе как это сделать?

Ответы [ 3 ]

7 голосов
/ 02 января 2012

Вы почти всегда должны использовать Base64 (или шестнадцатеричный) для представления произвольных двоичных данных в печатном тексте:

byte[] binary = ...;
string text = Convert.ToBase64String(binary);

...

string text = ...;
byte[] binary = Convert.FromBaseString(text);

Вы можете использовать MemoryStream.ToArray() дляпреобразовать все данные в MemoryStream в байтовый массив.Выполнение этого в потоковом режиме потребовало бы немного больше работы, но это было бы выполнимо - и это поддерживается в среде с использованием классов ToBase64Transform и FromBase64Transform, которые выможно использовать для связывания потока с CryptoStream.Результатом будет ASCII-кодированный поток base64.

2 голосов
/ 02 января 2012

Проверьте, что я сделал для своего пароля, используя Convert.FromBase64String и Convert.ToBase64String Методы

Проверьте пример документации, которая может очистить картинку больше вы .. вы можете передать свой байтовый массив в качестве параметра, а затем проверить, что Вы получите .. По ссылке, указанной в ASCII armor, есть список наиболее часто используемых форм кодирования двоичного текста, в котором доступно base64. Вы можете работать над этим, используя библиотеки .net.

// закодировать

public static string EncodeString(string s)
        {
            byte[] b = System.Text.Encoding.Default.GetBytes(s);
            return Convert.ToBase64String(b, 0, b.Length);
        }

// расшифровывает

public static string DecodeString(string s)
{
    byte[] b = Convert.FromBase64String(s);
    return System.Text.Encoding.Default.GetString(b);
}
2 голосов
/ 02 января 2012

Вы можете использовать base64-кодировку, чтобы получить достаточно компактное ASCII-представление двоичных данных:

string data = Convert.ToBase64String(theMemoryStream.ToArray());

Используйте метод Convert.FromBase64String для декодирования строки.

...