Справочник функций

Ваш аккаунт

Войти через: 
Забыли пароль?
Регистрация
Информацию о новых материалах можно получать и без регистрации:

Почтовая рассылка

Подписчиков: -1
Последний выпуск: 19.06.2015

Перевод строки в массив битов и обратно

63K
08 октября 2010 года
bihuf404
7 / / 08.10.2010
В общем суть такова:
Я пишу на Си шарп программу, которая будет шифровать текст. То есть на входе строка. На выходе строка. Но алгоритм шифрования(пробовал DES,AES,ГОСТ28147-89) подразумевает на входе массив бит длины 64, на выходе аналогично. Пробовал работать с кодировками ASCII,UTF7,UTF8,UTF32.
Проблема в том, что не каждому массиву бит длины 64 соответствует однозначно некий текст, то есть при конвертации массива в строку и обратно на выходе имеем другой массив бит. Желательно использовать кодировку типа ANSI, когда каждому символу соответствует один байт и каждому байту однозначно один символ(биективное отображение).
Вопрос. Какое отображение строки в массив Байтов биективно?
5
08 октября 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: bihuf404
Вопрос. Какое отображение строки в массив Байтов биективно?


Любую строку в .NET можно представить массивом байтов используя класс System.Text.Encoding и метод GetBytes().

Любой массив байтов можно записать в виде строки символов используя кодировку Base64.

PS. Воздержитесь от использования кодировки ASCI. На дворе XXI век и Уникод.

63K
08 октября 2010 года
bihuf404
7 / / 08.10.2010
hardcase, То есть если я сконвертирую массив в строку и обратно, то получу тот же массив?
5
08 октября 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: bihuf404
hardcase, То есть если я сконвертирую массив в строку и обратно, то получу тот же массив?


Сконвертируете в Base64 представление? Если так, то да.

63K
08 октября 2010 года
bihuf404
7 / / 08.10.2010
Можешь подсказать как именно перевести из строки в масиив байт, в частности какую кодировку использовать?
5
08 октября 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: bihuf404
Можешь подсказать как именно перевести из строки в масиив байт, в частности какую кодировку использовать?


Т.е. по ссылкам на MSDN ходить уже не в моде?

 
Код:
byte[] text = System.Text.Encoding.UTF8.GetBytes("blablabla");
63K
08 октября 2010 года
bihuf404
7 / / 08.10.2010
В том то и дело, пишу
 
Код:
string str1="ololo";
byte[] str_bin=System.Text.Encoding.UTF8.GetBytes(str1);
string str2=System.Convert.ToBase64String(str_bin);

После этого str1 и str2 разные...
5
08 октября 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: bihuf404
В том то и дело, пишу
 
Код:
string str1="ololo";
byte[] str_bin=System.Text.Encoding.UTF8.GetBytes(str1);
string str2=System.Convert.ToBase64String(str_bin);

После этого str1 и str2 разные...



Естественно :) А вы чего ожидали? Base64 это форма представления бинарных данных в виде текста.
Вообще, алгоритмы шифрования сильно удалены от обычного понятия текста. Они оперируют исключительно числами а не буквами-литералами. Так зачем же тащить в них Unicode?

7
08 октября 2010 года
@pixo $oft
3.4K / / 20.09.2006
Ясен перец!Символы в исходной кодировке и в Base64–не одно и то же
Бегом учить матчасть!

hardcase,опередил:)
63K
08 октября 2010 года
bihuf404
7 / / 08.10.2010
Собственно говоря такого результата я и ожидал))))
Спасибо за помощь
63K
08 октября 2010 года
bihuf404
7 / / 08.10.2010
@pixo $oft, Лучше предложь, чтобы одинаковые стали, при этом каждому тексту однозначно соответствовал массив байтов, и КАЖДОМУ массиву байтов соотвествовал однозначно некий текст. Причем конвертация была взаимно обратной...
5
08 октября 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: bihuf404
@pixo $oft, Лучше предложь, чтобы одинаковые стали, при этом каждому тексту однозначно соответствовал массив байтов,


Текст - это одна из форм "массива байтов". В памяти - UTF16, на диске - UTF8 (как правило).

Цитата: bihuf404
КАЖДОМУ массиву байтов соотвествовал однозначно некий текст. Причем конвертация была взаимно обратной...


В общем случае это не разрешимо. Сами догадаетесь?

63K
08 октября 2010 года
bihuf404
7 / / 08.10.2010
В принципе есть предположение как это сделать, но через одно место *ROFL*
Есть инверсныц метод для ToBase64String?
63K
21 октября 2010 года
AmazingS
4 / / 14.10.2010
Чтобы не создавать новую тему,задам вопрос здесь.
Получаю строку с именем пользователя с клиента на сервер. Сервер ее принимает в виде байтового массива и перевод в строку в ASCII, но русский текст не распознается. Подскажите как правильно преобразовать русский текст?
5
21 октября 2010 года
hardcase
4.5K / / 09.08.2005
Цитата: AmazingS
Сервер ее принимает в виде байтового массива и перевод в строку в ASCII, но русский текст не распознается. Подскажите как правильно преобразовать русский текст?


ASCII это семибитная кодировка, поэтому все символы с кодами выше 127 превращаются в знаки вопросов. Вам нужно использовать правильную однобайтовую кодировку: метод Encoding.GetCodepage должен помочь.

63K
22 октября 2010 года
AmazingS
4 / / 14.10.2010
Да, большое спасибо )
Реклама на сайте | Обмен ссылками | Ссылки | Экспорт (RSS) | Контакты
Добавить статью | Добавить исходник | Добавить хостинг-провайдера | Добавить сайт в каталог