2010-08-24 91 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