Unicode декодирует иначе, чем закодированный текст - PullRequest
0 голосов
/ 25 апреля 2011

У меня есть данные, которые шифруются и отправляются на другую страницу, где они декодируются и интерпретируются. Данные хэшируются в Unicode с использованием System.Text.Encoding.Unicode.GetString (), затем шифруются, затем кодируются в строку Base64 и отправляются через URL, затем принимающий сайт извлекает это из Base64 и дешифрует его снова, и использует System.Text.Encoding.Unicode.GetBytes (), чтобы снова вернуться к байту.

Однако я получаю один символ, который не интерпретируется в байтах так же, как я его отправляю. Оно «появляется» так же, как « ». Эта строка затем расшифровывается в байты, но оценивается по-разному.

При кодировании символы Юникода занимают два байта - этот символ кодируется как эти байты:

[0]: 139
[1]: 222 

но декодируется как

[0]: 253
[1]: 255

Все остальные символы должным образом преобразуются в и из шифрования, при этом их преобразования байтов остаются неизменными.

Является ли этот персонаж особым случаем? Есть ли другие персонажи, которые будут иметь такой же эффект? Что-то сломалось с шифрованием?

1 Ответ

2 голосов
/ 25 апреля 2011

Вы не должны использовать кодировку текста вообще в этой ситуации.Зашифруйте исходные данные непосредственно в байтовый массив, затем закодируйте их в строку base64, затем декодируйте их в байтовый массив и расшифруйте исходные байты.Единственная строка - это строка base64.НЕ используйте промежуточную строку на этапах шифрования / расшифровки.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...