RSA解密失败解决方案
2022-11-21 本文已影响0人
吕建雄
在使用Objective-C-RSA进行RSA解密遇到的问题:
1、使用github上demo中的公钥串和私钥串,加解密是可以成功
2、通过RSA密钥生成器生成的公钥串和私钥串,加密可成功,解密失败
通过跟踪代码发现问题出现在:stripPrivateKeyHeader 这个方法中,
unsigned char *c_key = (unsigned char *)[d_key bytes];
unsigned int idx = 22; //magic byte at offset 22
if (0x04 != c_key[idx++]) { return nil; }
由于c_key[idx++] != 0x04,所以直接返回nil;
针对这种情况,尝试将addPrivateKey方法中,data = [RSA stripPrivateKeyHeader:data];的调用删除,删除后发现加解密可成功
这行代码是干什么的作用是什么呢?
原因是,MAC下生成的私钥不能直接被使用,需要进行PKCS#8编码 编码之后就可以了
pkcs8 -topk8 -in rsa_private_key.pem -out pkcs8_rsa_private_key.pem -nocrypt
为了解决通过pem生成的私钥解密问题,所以此处可以修改代码,通过判断是否需要是pem生成的私钥还是私钥字符串,来决定是否调用stripPrivateKeyHeader方法