菜鸟教程小白 发表于 2022-12-12 16:38:18

ios - 使用 AES 解密 Base64 编码的字符串会导致错误状态 4301(缓冲区太小)


                                            <p><p>我想解密一个 <code>AES</code> 加密字符串,它是 <code>Base64</code> 在 Objective-C 中编码的:</p>

<p>这是我的代码:</p>

<pre><code>NSString *base64String = @&#34;RwH0KBSRjFKJQYGsCze0&#34;;
NSData *base64Data = [ initWithBase64EncodedString:
   base64String options:0];

char * key = &#34;shouldbe16chars.&#34;;
NSUInteger dataLength = ;
uint8_t unencryptedData;
size_t unencryptedLength;

CCCryptorStatus status = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,
    0 , key,kCCKeySizeAES128, NULL, ,
    , unencryptedData, dataLength,
    &amp;unencryptedLength);

NSString *output = [ initWithBytes:
   unencryptedData length:unencryptedLength
   encoding:NSUTF8StringEncoding];

NSLog(@&#34;status: %d output: %@&#34;,status, output);
</code></pre>

<p>运行代码时,结果为:<code>Status = -4301, output = null</code></p>

<p>根据文档,<strong>Status 4301 = "buffer too small"</strong></p>

<p>调试我的代码时,变量设置如下:</p>

<pre><code>base64Data = 4701f428 14918c52 894181ac 0b37b4
dataLength = 15 bytes
unencryptedLength = 0
unencryptedData = {}
</code></pre>

<p>只有设置了选项<code>kCCOptionPKCS7Padding</code>时才会出现错误,如果设置为<code>0</code>,status = 0,output = {}。</p>

<p>我在 SO 上检查了许多代码示例,但没有发现我的代码有任何问题。</p>

<p>你知道我的代码有什么问题吗?</p>

<p>顺便说一句:我在此示例代码中使用的 <code>base64string</code> 是使用以下开源框架在 JavaScript 中创建的:<a href="http://www.movable-type.co.uk/scripts/aes.html" rel="noreferrer noopener nofollow">http://www.movable-type.co.uk/scripts/aes.html</a> .我不知道这些信息是否有帮助。</p></p>
                                    <br><hr><h1><strong>Best Answer-推荐答案</ strong></h1><br>
                                            <p><p>您在 CCCrypt 中的倒数第二个参数应该是 dataOutAvailable。您传递了 dataLength,这似乎是 inData 的长度(您已经正确地作为参数传递了)。</p></p>
                                   
                                                <p style="font-size: 20px;">关于ios - 使用 AES 解密 Base64 编码的字符串会导致错误状态 4301(缓冲区太小),我们在Stack Overflow上找到一个类似的问题:
                                                        <a href="https://stackoverflow.com/questions/20092911/" rel="noreferrer noopener nofollow" style="color: red;">
                                                                https://stackoverflow.com/questions/20092911/
                                                        </a>
                                                </p>
                                       
页: [1]
查看完整版本: ios - 使用 AES 解密 Base64 编码的字符串会导致错误状态 4301(缓冲区太小)