gpt4 book ai didi

ios - SecKeyDecrypt 并不总是在 iOS 中使用 RSA 解密

转载 作者:塔克拉玛干 更新时间:2023-11-02 10:01:52 36 4
gpt4 key购买 nike

我在 .NET 中使用 RSACrpytoServiceProvider 来使用 iOS 生成的公钥加密数据。在iOS端,使用相同的私钥,有时解密成功有时不成功。我在 .NET 中使用相同的公钥创建不同的密文,并使用 Base64 编码传递它。在 iOS 中,我解码 Base64 并将此方法作为内容发送。我使用 SecKeyGeneratePair 生成 key 对。我在生成之前删除了具有相同标签的 key 对。SecKeyDecrypt 返回的错误是:OSStatus return error code -9809 operation could not be completed.可能是什么问题?

size_t cipherBufferSize = [content length];
void *cipherBuffer = malloc(cipherBufferSize);
[content getBytes:cipherBuffer length:cipherBufferSize];

size_t plainBufferSize = [content length];

uint8_t *plainBuffer = malloc(plainBufferSize);

OSStatus sanityCheck = SecKeyDecrypt(key,
kSecPaddingPKCS1,
cipherBuffer,
cipherBufferSize,
plainBuffer,
&plainBufferSize);

最佳答案

经过一番挖掘,我意识到从 publickey 中提取的模数是 129 字节。它必须是 128。我使用 getPublicKeyModFromKeyData 方法来提取模数。我发现这会在开头添加一个额外的字节。我删除了那个字节,现在它可以工作了。感谢您的帮助。

- (NSData *)getPublicKeyModFromKeyData:(NSData*)pk
{
if (pk == NULL) return NULL;

int iterator = 0;

iterator++; // TYPE - bit stream - mod + exp
[self derEncodingGetSizeFrom:pk at:&iterator]; // Total size

iterator++; // TYPE - bit stream mod
int mod_size = [self derEncodingGetSizeFrom:pk at:&iterator];

// return [pk subdataWithRange:NSMakeRange(iterator, mod_size)];
NSData* subData=[pk subdataWithRange:NSMakeRange(iterator, mod_size)];
return [subData subdataWithRange:NSMakeRange(1, subData.length-1)];

关于ios - SecKeyDecrypt 并不总是在 iOS 中使用 RSA 解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29147812/

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