ios - 使用 AES 解密 Base64 编码的字符串会导致错误状态 4301(缓冲区太小)
<p><p>我想解密一个 <code>AES</code> 加密字符串,它是 <code>Base64</code> 在 Objective-C 中编码的:</p>
<p>这是我的代码:</p>
<pre><code>NSString *base64String = @"RwH0KBSRjFKJQYGsCze0";
NSData *base64Data = [ initWithBase64EncodedString:
base64String options:0];
char * key = "shouldbe16chars.";
NSUInteger dataLength = ;
uint8_t unencryptedData;
size_t unencryptedLength;
CCCryptorStatus status = CCCrypt(kCCDecrypt, kCCAlgorithmAES128,
0 , key,kCCKeySizeAES128, NULL, ,
, unencryptedData, dataLength,
&unencryptedLength);
NSString *output = [ initWithBytes:
unencryptedData length:unencryptedLength
encoding:NSUTF8StringEncoding];
NSLog(@"status: %d output: %@",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]