ios - 在 Objective C 中解密 AES-256-CBC
<p><p>我正在构建一个 iPhone 应用程序,它通过 JSON 从 PHP 后端获取解密的字符串。</p>
<p>在 PHP 中,我像这样加密字符串:</p>
<pre><code>$encrypt_method = "AES-256-CBC";
$secret_key = 'This is my secret key';
$secret_iv = 'This is my secret iv';
// hash
$key = hash('sha256', $secret_key);
// iv - encrypt method AES-256-CBC expects 16 bytes - else you will get a warning
$iv = substr(hash('sha256', $secret_iv), 0, 16);
if( $action == 'encrypt' ) {
$output = openssl_encrypt($string, $encrypt_method, $key, 0, $iv);
$output = base64_encode($output);
}
</code></pre>
<p>在 Objective C 中,我尝试使用 BBEAS 解密此字符串:<a href="https://github.com/benoitsan/BBAES" rel="noreferrer noopener nofollow">https://github.com/benoitsan/BBAES</a> </p>
<p>这是我在 Objective C 中得到的代码:</p>
<pre><code> NSData* salt = ;
NSData *key = ;
NSData *decryptedMessage = ;
NSLog(@"Decrypted message: %@", decryptedMessage);
</code></pre>
<p>日志现在只显示一个空对象。</p>
<p>我找到了 C# 的重复帖子:<a href="https://stackoverflow.com/questions/20297973/how-to-decrypt-an-aes-256-cbc-encrypted-string" rel="noreferrer noopener nofollow">How to decrypt an AES-256-CBC encrypted string</a> </p>
<p>编辑:
可以说我可以调整 PHP 中的编码。我应该如何加密 PHP 中的字符串以在 Objective C 中解密?</p></p>
<br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
<p><p>您在 PHP 中所做的事情与在 iOS 中不同。我不熟悉这个 BBAES 框架,但您似乎拥有一个密码,您使用 PBKDFkey 派生从中生成 256 位 AESkey ,并使用它来解密数据。
但是,在 PHP 中,您正在对密码进行哈希处理并使用它来加密您的数据,因此您可能使用不同的 AESkey 进行加密和解密。我也不确定 IV 是否匹配。</p>
<p>你应该做的是:</p>
<p>在 PHP 中,为您执行的每次加密生成一个随机的 16 字节 IV,并使用 PBKDFkey 派生从您的密码生成 256 位 AESkey 。请记住,盐和迭代次数在 PHP 和 iOS 中必须相同。加密后,将IV附加到加密数据后发送。</p>
<p>在 iOS 中,从收到的密文(最后 16 个字节)中提取 IV,使用相同的盐和迭代次数之前的相同方式从密码生成 AESkey ,然后解密数据(没有 16最后的字节IV)</p>
<p><strong>编辑:</strong></p>
<p>正如@Zaph 指出的那样,我忘了提到您也应该使用相同类型的填充。 BBAES 似乎使用 PKCS7 填充。</p></p>
<p style="font-size: 20px;">关于ios - 在 Objective C 中解密 AES-256-CBC,我们在Stack Overflow上找到一个类似的问题:
<a href="https://stackoverflow.com/questions/29427780/" rel="noreferrer noopener nofollow" style="color: red;">
https://stackoverflow.com/questions/29427780/
</a>
</p>
页:
[1]