Строка шифрования AES128 не похожа на строку .net

Я выполняю шифрование / дешифрование AES128 в приложении iOS для отправки / получения данных с сервера .net, я почти закончил, но во время модульного тестирования я получил некоторую проблему в строке шифрования, некоторая зашифрованная строка не похожа на сервер .net, Can скажем, 98 процентов строк правильны с обеих сторон, но проблема возникает в 2-процентных строках, когда я сопоставляю обеим зашифрованным строкам, а затем обнаруживает, что в конце строки, созданной iOS, немного коротко, а конец .net длинной строки. Еще одна вещь, я обнаружил, что строка iOS является подстрокой строки .net. Когда я попытался расшифровать зашифрованную строку iOS, она не расшифрована, показывая нуль, но когда я пытаюсь расшифровать генерируемую зашифрованную строку .net-сервера (она была больше, чем iOS), я могу использовать расшифрованную строку.

Использование одного и того же ключа (длиной 16 символов на сервере и iOS).

не могли бы вы предложить решение или где я ошибаюсь.

Большое спасибо всем.

Исходная строка: "custId = 10 & mode = 1" KEY = "PasswordPassword"

в зашифрованной строке iOS: r51TbJpBLYDkcPC + Ei6Rmg ==

в .net encrpted string: r51TbJpBLYDkcPC + Ei6RmtY2fuzv3RsHzsXt / RpFxAs =

заполнение для шифрования = kCCOptionPKCS7Padding;

Я следовал этому руководству. http://automagical.rationalmind.net/2009/02/12/aes-interoperability-between-net-and-iphone/

Аналогичный вопрос найден на CryptoSE

Моя версия TL; DR

По сути .net и iOS имеют разные реализации, и поскольку руководство, за которым вы следуете, с 2009 года, я бы ожидал, что он уже устарел, так как с тех пор было по крайней мере 1 серьезный пересмотр на каждой из платформ.

Оригинальный ответ Дает следующий ответ:

Я могу сразу подумать о четырех причинах:

  1. Они оба не используют AES256. Я вижу в документе Obj-C прямое утверждение о том, что они используют AES256 (если вы не намеренно меняете его), я не вижу никаких выражений в документе Visual Basic, в котором говорится, какой размер ключа они используют (если только это не то, что они означает «Блочные биты»).

  2. Различные ключи. AES256 берет ключ из 256 бит; нет стандартного метода, чтобы взять строку из 5 символов и преобразовать ее в 256-битное значение. Теперь существует множество возможных методов; нет особой уверенности в том, что они оба используют один и тот же.

  3. Различные режимы работы. Блок-шифр AES принимает 128-битные значения и преобразует их в 128-битные значения. Однако не все наши сообщения могут вписываться в 128 бит, и, кроме того, иногда есть и другие вещи, которые мы хотели бы сделать, кроме шифрования сообщений. Режим работы – это метод, который использует блочный шифр и использует его как инструмент для выполнения более полезной функции (например, шифрования гораздо более длинного сообщения). Существует ряд стандартных режимов операций, в документе Obj-C указано, что он использует режим CBC; документ Visual Basic имеет пугающие звуковые слова, которые могут быть искаженным объяснением режима CBC.

  4. Капельницы. В некоторых режимах работы (например, в режиме CBC) шифр выбирает «Инициализационный вектор» случайным образом; которые могут быть переведены вместе с зашифрованным сообщением (потому что дешифратор будет нуждаться в этом значении). Одна из вещей, которые делает этот Инициализационный вектор, если вы зашифруете сообщение второй раз, второй зашифрованный текст вообще не будет похож на первый зашифрованный текст; таким образом, кто-то, кто слушает, не сможет вывести, что вы только что повторили сообщение. В документе Obj-C конкретно говорится, что он будет выбирать случайный IV (если не сказать его сами).

  5. Как вы можете видеть, существует множество причин, по которым два зашифрованных текста могут быть разными. Одна вещь, которую вы можете попробовать: передать зашифрованный текст от одного к другому и попросить их расшифровать его; если они могут, вы можете быть уверены, что обе стороны делают в основном одно и то же.


Как вы можете видеть, существует множество причин, по которым два зашифрованных текста могут быть разными. Одна вещь, которую вы можете попробовать: передать зашифрованный текст от одного к другому и попросить их расшифровать его; если они могут, вы можете быть уверены, что обе стороны делают в основном одно и то же.

Interesting Posts
Давайте будем гением компьютера.