我正在尝试加密要传输的数据和服务器之间的第四个但我似乎无法在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.
答案 0 :(得分:1)
iPhone正在使用标准填充方案PKCS5填充。标记为“正确”的输出使用零填充。我不熟悉CCCrypt,但我认为如果将kCCOptionPKCS7Padding
替换为0,并且你自己使用二进制零填充,你会得到相同的答案。
答案 1 :(得分:1)
您应该更改PHP端以使用PKCS#5填充填充明文 - 然后您应该得到相同的结果。您可以在加密之前在明文上使用此功能(传递$blocksize
16):
function pkcs5_pad ($text, $blocksize)
{
$pad = $blocksize - (strlen($text) % $blocksize);
return $text . str_repeat(chr($pad), $pad);
}