gpt4 book ai didi

ios - iOS 中的 RSA 解密失败

转载 作者:行者123 更新时间:2023-12-01 16:30:13 34 4
gpt4 key购买 nike

我正在尝试在 iOS 中执行 RSA2048 并且正在关注 example codes来自 Apple 以及这个问题 RSA implementations in Objective C .我已经在 iOS 8.4.1 的 iPhone 5c 上进行了测试,但示例代码在使用私钥解密时失败,错误代码为 -9809(遇到了基础加密错误),即使使用公钥加密也是如此。我了解基本方法是生成一个 RSA key 对,将它们保护在钥匙串(keychain)中,并使用公钥 ref 加密和私钥解密。我完全迷失了为什么解密会失败,并非总是 , 有时解密成功。

完整代码可在 https://gist.github.com/aceisScope/372e6d6f92650ce03624 找到.引发错误的解密部分如下所示,其中有时状态 = -9809,有时它会起作用并返回 0:

status = SecKeyDecrypt(privateKey,
PADDING,
cipherBuffer,
cipherBufferSize,
plainBuffer,
&plainBufferSize
);

我还设置了一个检查,如果已经生成了这样的 key 对,下次调用加密/解密时,它将直接使用 key 链中已经生成和存储的 key 对,而不生成新的 key 对。

更新 :
我偶然发现了这篇文章 iPhone Public-Key Encryption SecKeyEncrypt returns error 9809 (errSSLCrypto)发现错误的密码缓冲区大小可能会导致 -9809 错误到 加密 .然而,即使我确保加密中的密码缓冲区大小和解密中的普通缓冲区大小与 key block 大小和私钥 block 大小相同,加密总是有效,但解密有时会失败。

最佳答案

我发现了问题。在加密结束时,将密码缓冲区转换为 NSData 时,在以下代码中

NSMutableData *data=[[NSMutableData alloc] init];
[data appendBytes:cipherBuffer length:strlen( (char*)cipherBuffer ) + 1];

长度不正确。它应该是密码缓冲区的大小,与 key block 大小相同。
所以改成之后
NSData *data = [NSData dataWithBytes:cipherBuffer length:cipherBufferSize];

解密现在有效。

关于ios - iOS 中的 RSA 解密失败,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32133613/

34 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com