2010-08-24 45 views
0

我想加密数据在服务器之间传递回来和第四,但我似乎无法得到正确的输出在objective-c :(完整的代码在这里:http://pastebin.com/zPdHxShuAES128 iphone加密匹配,直到最后

// 128-bit key, CBC mode 
// ------------------------ 
// IV = '123456789' 
// (hex: 31323334353637383930313233343536) 
// Key = '123456789' 
// (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. 
+1

:(你的引擎收录代码不见了将是巨大的,如果它可以访问 – AriX 2011-02-06 23:51:51

回答

1

iPhone正在使用标准填充方案PKCS5填充。您标记为“正确”的输出使用零填充。我对CCCrypt不熟悉,但是我认为如果用0代替kCCOptionPKCS7Padding,并且你拥有二进制零填充,你会得到相同的答案。

+2

只知道零填充差不多。总是错误的解决方案:-) – 2010-08-24 02:56:19

+0

@GregS,你有任何示例代码指向我在正确的方向吗? – 2010-08-24 03:18:10

+0

同意@ St3fan - 正确的解决方案是将PHP端改为使用PKCS#5填充,这很容易。 – caf 2010-08-24 03:45:40

1

您应该更改PHP端以使用PKCS#5填充填充明文 - 然后您应该得到相同的结果。您可以加密之前,对明文使用此功能(通过16的$blocksize):

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

是的,我已经知道了这一点。谢谢 – 2010-08-24 19:21:04