菜鸟教程小白 发表于 2022-12-13 10:28:38

ios - 在 Objective C 中解密 AES-256-CBC


                                            <p><p>我正在构建一个 iPhone 应用程序,它通过 JSON 从 PHP 后端获取解密的字符串。</p>

<p>在 PHP 中,我像这样加密字符串:</p>

<pre><code>$encrypt_method = &#34;AES-256-CBC&#34;;
    $secret_key = &#39;This is my secret key&#39;;
    $secret_iv = &#39;This is my secret iv&#39;;

    // hash
    $key = hash(&#39;sha256&#39;, $secret_key);

    // iv - encrypt method AES-256-CBC expects 16 bytes - else you will get a warning
    $iv = substr(hash(&#39;sha256&#39;, $secret_iv), 0, 16);

    if( $action == &#39;encrypt&#39; ) {
      $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(@&#34;Decrypted message: %@&#34;, 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]
查看完整版本: ios - 在 Objective C 中解密 AES-256-CBC