RNDecryptor:解密由PHP加密的数据时出错(mcrypt_encrypt)

时间:2013-01-23 21:57:30

标签: php iphone ios mcrypt

我有一个问题......它杀了我

以下是我的代码:

PHP

1-I没有使用任何类型的预填充,并生成了16字节的IV。

2-I强制pbkdf2函数返回8个字节的密钥和& hmacKey

$key = "myKey";
$plainText = "iphone";
$iv = mcrypt_create_iv(16, MCRYPT_RAND);
$keySalt = '12345678';
$hmacSalt = '12345678';
$_key = pbkdf2('SHA1', $key, $keySalt, 10000, 8, true);
$_hmacKey = pbkdf2('SHA1', $key, $hmacSalt, 10000, 8, true);
$cipherText = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $_key, $plainText, MCRYPT_MODE_CBC, $iv);
$dataWithoutHMAC = chr(2).chr(1).$keySalt.$hmacSalt.$iv.$cipherText;

3-first try我将密文传递给hash_hmac

$data = base64_encode($dataWithoutHMAC.hash_hmac('SHA256',$cipherText,$_hmacKey, true));

我在iOS中解密时遇到“et.robnapier.RNCryptManager错误-4301”。 “这意味着我认为缓冲区太小了”

4秒尝试我传递了标题(chr(2).chr(1)。$ keySalt。$ hmacSalt。$ iv)+密码文本到hash_hmac(但我在第一次尝试时获得了相同的结果[ - 4301])

$data = base64_encode($dataWithoutHMAC.hash_hmac('SHA256',$dataWithoutHMAC,$_hmacKey, true));

在iOS

decryptionError = nil;
NSData *fromPHPData = [@"AgExMjM0NTY3ODEyMzQ1Njc4WvrmgsFy6IoWNmm2hYL9N2jNVxU13Eo15cRyQRakRZ9WsjZ2CY/B5y4YkmG9uGdB2vHFpmpjsnm3O4d59Ex7Nw==" base64DecodedData];

NSData *fromPHPDecryptedData = [RNDecryptor decryptData:fromPHPData withPassword:@"myKey" error:&decryptionError];

NSLog(@"decryptionError %@", decryptionError);
NSString *fromPHPEcryptedStr = [fromPHPDecryptedData base64EncodedString];
NSLog(@"data : %@", fromPHPEcryptedStr);

我在iOS中遇到的错误是:“操作无法完成。(net.robnapier.RNCryptManager error -4301。)”

0 个答案:

没有答案
相关问题