2

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

下面是我的代码:

PHP

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

2-我强制 pbkdf2 函数为 key & hmacKey 返回 8 个字节

$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-第一次尝试我将密文传递给 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 错误 -4301。)”

4

0 回答 0