RSA解密在iOS中失败

RSA解密在iOS中失败,ios,encryption,rsa,Ios,Encryption,Rsa,我正在试着用iOS做RSA2048,我在关注苹果的问题,还有这个问题。我已经用iOS 8.4.1在iPhone 5c上进行了测试,但是样本代码在使用私钥解密时失败,错误代码为-9809(遇到了一个潜在的加密错误),即使使用公钥进行加密也是如此。我知道基本的方法是生成RSA密钥对,在密钥链中保护它们,并使用公钥ref加密和私钥解密。我完全不明白为什么解密会失败,而且并非总是,有时解密会成功 完整代码可在上找到。引发错误的解密部分如下所示,其中不时状态=-9809,其他时间它工作并返回0: stat

我正在试着用iOS做RSA2048,我在关注苹果的问题,还有这个问题。我已经用iOS 8.4.1在iPhone 5c上进行了测试,但是样本代码在使用私钥解密时失败,错误代码为-9809(遇到了一个潜在的加密错误),即使使用公钥进行加密也是如此。我知道基本的方法是生成RSA密钥对,在密钥链中保护它们,并使用公钥ref加密和私钥解密。我完全不明白为什么解密会失败,而且并非总是,有时解密会成功

完整代码可在上找到。引发错误的解密部分如下所示,其中不时状态=-9809,其他时间它工作并返回0:

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

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


更新
我在这篇文章中发现,错误的密码缓冲区大小可能会导致加密出现-9809错误。然而,即使我确保加密中的密码缓冲区大小和解密中的普通缓冲区大小与密钥块大小和私钥块大小相同,加密始终有效,但解密不时失败。

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

NSMutableData *data=[[NSMutableData alloc] init];
[data appendBytes:cipherBuffer length:strlen( (char*)cipherBuffer ) + 1];
长度不正确。它应该是密码缓冲区的大小,与密钥块大小相同。 所以把它改成

NSData *data = [NSData dataWithBytes:cipherBuffer length:cipherBufferSize];

现在可以解密了

如果不是您正在执行的全部加密/解密例程,您是否可以编辑您的问题,以至少显示获得错误代码-9809的代码行?密钥大小为2048位,消息大小为15位