Перевод строки в массив битов и обратно
Я пишу на Си шарп программу, которая будет шифровать текст. То есть на входе строка. На выходе строка. Но алгоритм шифрования(пробовал DES,AES,ГОСТ28147-89) подразумевает на входе массив бит длины 64, на выходе аналогично. Пробовал работать с кодировками ASCII,UTF7,UTF8,UTF32.
Проблема в том, что не каждому массиву бит длины 64 соответствует однозначно некий текст, то есть при конвертации массива в строку и обратно на выходе имеем другой массив бит. Желательно использовать кодировку типа ANSI, когда каждому символу соответствует один байт и каждому байту однозначно один символ(биективное отображение).
Вопрос. Какое отображение строки в массив Байтов биективно?
Любую строку в .NET можно представить массивом байтов используя класс System.Text.Encoding и метод GetBytes().
Любой массив байтов можно записать в виде строки символов используя кодировку Base64.
PS. Воздержитесь от использования кодировки ASCI. На дворе XXI век и Уникод.
Сконвертируете в Base64 представление? Если так, то да.
Т.е. по ссылкам на MSDN ходить уже не в моде?
byte[] str_bin=System.Text.Encoding.UTF8.GetBytes(str1);
string str2=System.Convert.ToBase64String(str_bin);
После этого str1 и str2 разные...
byte[] str_bin=System.Text.Encoding.UTF8.GetBytes(str1);
string str2=System.Convert.ToBase64String(str_bin);
После этого str1 и str2 разные...
Естественно :) А вы чего ожидали? Base64 это форма представления бинарных данных в виде текста.
Вообще, алгоритмы шифрования сильно удалены от обычного понятия текста. Они оперируют исключительно числами а не буквами-литералами. Так зачем же тащить в них Unicode?
Бегом учить матчасть!
hardcase,опередил:)
Спасибо за помощь
Текст - это одна из форм "массива байтов". В памяти - UTF16, на диске - UTF8 (как правило).
В общем случае это не разрешимо. Сами догадаетесь?
Есть инверсныц метод для ToBase64String?
Получаю строку с именем пользователя с клиента на сервер. Сервер ее принимает в виде байтового массива и перевод в строку в ASCII, но русский текст не распознается. Подскажите как правильно преобразовать русский текст?
ASCII это семибитная кодировка, поэтому все символы с кодами выше 127 превращаются в знаки вопросов. Вам нужно использовать правильную однобайтовую кодировку: метод Encoding.GetCodepage должен помочь.