2016-03-07 1 views
-4

Когда я использую строку шифрования AES128, если зашифрованная строка слишком длинная, она будет содержать в ней \ r \ n. например enter image description hereAES encrypt string появляется r n

Теперь я должен использовать пустую строку, чтобы заменить ее. Почему строка шифрования содержит \ r \ n и лучший способ ее избежать или исправить. Спасибо.

Ответы: это вызвано процессом кодирования Base64, каждые 64 символа будут вставлять \ r \ n.

+2

Пожалуйста, предоставьте код, который вы используете. – sschale

+0

Никто не знает, как вы создаете свою зашифрованную строку, кроме вас и некоторых экстрасенсов. –

ответ

2

Это закодированная в Base64 строка.

Фактический вывод шифрования представляет собой массив из 8-разрядных байтов, а не символов. Код Base64 кодирует зашифрованные данные с возможностью вставки разрывов строк каждые 64 символа, иногда это позволяет лучше печатать выходные данные. Когда он декодируется, используйте параметр NSDataBase64DecodingIgnoreUnknownCharacters для удаления разрывов строк.

В частности, для Objective-C, чтобы создать строку Base64 из NSData является:

- (NSString *)base64EncodedStringWithOptions:(NSDataBase64EncodingOptions)options 

options включают в себя:

NSDataBase64Encoding64CharacterLineLength
Установить максимальную длину строки 64 символов, после чего строка вставляется.

Какие вставки «\ r \ n» (возврат каретки, новая строка) содержат символы из 64 символов.

Если это не то, что вы хотите передать 0 в качестве значения параметра.

Для декодирования Base64 использовать метод Objective-C:

- (instancetype)initWithBase64EncodedString:(NSString *)base64String options:(NSDataBase64DecodingOptions)options 

С помощью опции: NSDataBase64DecodingIgnoreUnknownCharacters.

Яблоко Код:

по умолчанию реализация этого метода будет отклонять без алфавитных символов, включая символы конца строки. Чтобы поддерживать различные кодировки и игнорировать символы без алфавита, укажите значение параметра NSDataBase64DecodingIgnoreUnknownCharacters.

Вещь, которая отдает ее в качестве строки Base64, представляет собой длину, кратную 4, символы, используемые «a-zA-Z0-9 + /» и обратные символы «=».

Историческое примечание: В эти дни на разрывах OSX и iOS есть один символ строки «\ n» (0x0a). Когда мы использовали телетайпы как терминалы «\ r» (0x0d), возврат каретки вернул каретку или печатающую головку назад, но не переместил бумагу до следующей строки. «\ n» Новая строка переместила бумагу на одну строку, но переместила каретку или печатающую головку назад. Это были две различные механические операции. Позже некоторые системы использовали либо «\ r \ n», «\ n \ r», «\ r», либо «\ n». Unix выбирает «\ n» и, следовательно, OSX и iOS.

+0

Да, это вызвано кодировкой Base64. Спасибо. – zedzhao

 Смежные вопросы

  • Нет связанных вопросов^_^