AES128 шифрование iphone соответствует до самого конца - PullRequest
0 голосов
/ 24 августа 2010

Я пытаюсь зашифровать данные, которые должны быть переданы обратно и четвертым между серверами, но я не могу получить правильный вывод в target-c: (полный код здесь: http://pastebin.com/zPdHxShu)

 // 128-bit key, CBC mode
 // ------------------------
 // IV = '1234567890123456'  
 //  (hex: 31323334353637383930313233343536)
 // Key = '1234567890123456'  
 //  (hex: 31323334353637383930313233343536)
 // PlainText:
 //  'The quick brown fox jumped over the lazy dog'
 // CipherText(hex):
 //  f78176ae 8dfe8457 8529208d 30f446bb b29a64dc 388b5c0b 63140a4f 316b3f34 1fe7d3b1 a3cc5113 c81ef8dd 714a1c99 // correct output
 //  f78176ae 8dfe8457 8529208d 30f446bb b29a64dc 388b5c0b 63140a4f 316b3f34 50f18175 f7a3ad06 2d8033cc d092ca6a // my output
    //                                                                       ^^^ start to get different output here
 //  Note: I get this output in php no problem.

Ответы [ 2 ]

1 голос
/ 24 августа 2010

Вы должны изменить сторону PHP для заполнения открытого текста, используя отступ PKCS # 5 - тогда вы должны получить тот же результат. Вы можете использовать эту функцию (передавая $blocksize из 16) в открытом тексте перед шифрованием:

function pkcs5_pad ($text, $blocksize)
{
    $pad = $blocksize - (strlen($text) % $blocksize);
    return $text . str_repeat(chr($pad), $pad);
}
1 голос
/ 24 августа 2010

В iPhone используется стандартная схема заполнения, PKCS5. Вывод, который вы пометили как «правильный», использует заполнение нулями. Я не знаком с CCCrypt, но думаю, что если заменить kCCOptionPKCS7Padding на 0 и у вас есть заполнение двоичными нулями, вы получите тот же ответ.

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