Я подозреваю, что ваш ключ длиннее 32 байт UTF-8.В этом случае этот код неверен.Ваше patchNeeded
условие в основном создает ключ мусора.* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *) Не существует безопасного способа обрезания ключа, который вам дали, поэтому я не очень-то уверен.уверен, какое поведение вы хотите здесь.Это зависит от того, какие строки вы передаете.
Этот код также неверен, если iv
короче 16 байтов UTF-8.Вы получите случайные значения из стека.Эта часть может быть исправлена с помощью:
bzero(ivPointer, sizeof(ivPointer));
Но если ваша предыдущая версия опиралась на случайные значения, это все равно будет другим.
Предполагая, что вам нужно соответствовать старому поведению, лучший способотладка - это запустить вашу предыдущую версию в отладчике и посмотреть, что же из себя представляют keyPointer
и ivPointer
.
(Обратите внимание, что такой подход к созданию ключа очень небезопасен. Он резко сокращает AESпространство клавиш. Сколько зависит от того, какие строки вы передаете, но это драматично. Вы также никогда не должны повторно использовать одну и ту же комбинацию клавиш + iv в двух сообщениях при использовании CBC, что, вероятно, выглядит так. Если возможно, я рекомендуюпереход к правильной реализации AES. Вы можете посмотреть RNCryptor , чтобы найти пример того, как это сделать, или напрямую использовать RNCryptor, если хотите.)