私には問題があります...そしてそれは私を殺します
以下は私のコードです:
PHP
1-事前パディングを一切使用せず、IV を 16 バイトで生成しました。
2-pbkdf2 関数がキーと 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。)」