代码之家  ›  专栏  ›  技术社区  ›  Joey

AES128 iphone加密匹配到最后

  •  0
  • Joey  · 技术社区  · 14 年前

    我试图加密要在服务器之间传输的数据,但是我似乎无法在objective-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 回复  |  直到 14 年前
        1
  •  1
  •   President James K. Polk    14 年前

    iPhone使用的是标准的填充方案PKCS5 padding。标记为“正确”的输出使用零填充。我不熟悉CCCrypt,但我想如果 kCCOptionPKCS7Padding 对于0,如果你用二进制零填充,你会得到相同的答案。

        2
  •  1
  •   caf    14 年前

    您应该使用PKCS#5 padding将PHP端更改为填充纯文本-然后您应该得到相同的结果。您可以使用此函数(传递 $blocksize 在加密前的明文上:

    function pkcs5_pad ($text, $blocksize)
    {
        $pad = $blocksize - (strlen($text) % $blocksize);
        return $text . str_repeat(chr($pad), $pad);
    }