接收的公共密钥我是新来这个话题很抱歉,如果这是一个愚蠢的问题:\IOS:解密的消息与Web服务
我试图解密消息与给定的公钥。消息和公钥都是从web服务中获得的。
请参见下面的代码我现在该怎么办解密:
for (NSValue *refVal in keyRefs) {
SecKeyRef p_key = NULL;
[refVal getValue:&p_key];
if (p_key == NULL) continue;
size_t dataLength = encryptedData.length;
size_t outPutLength = MAX(dataLength, SecKeyGetBlockSize(p_key));
void *outPutBuf = malloc(outPutLength);
if (outPutBuf) {
// Error handling
OSStatus status = SecKeyDecrypt(p_key,
kSecPaddingNone,
encryptedData.bytes,
encryptedData.length,
outPutBuf,
&outPutLength
);
NSLog(@"decryption result code: %ld (size: %lu)", status, outPutLength);
NSLog(@"FINAL decrypted text: %s", outPutBuf);
if (status == errSecSuccess) {
break;
}
} else {
//Error handling
}
}
我没有错误,但解密的字符串显示是这样的(正确的输出应该是一个JSON阵列):
decryption result code: 0 size:511)
FINAL decrypted text: ˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇˇ
是因为我用“公钥”而不是“私钥”来使用“SecKeyDecrypt”?在这种情况下,我应该用什么来解密?
感谢您的任何帮助!
编辑:我使用的代码:http://blog.flirble.org/2011/01/05/rsa-public-key-openssl-ios/使用公钥我从服务器获取(这是“keyRefs”从代码片段来自)
公钥不用于解密。它用于加密和签名验证。私钥用于解密和签名。 – CodesInChaos
您链接的博客完全不使用RSA进行加密。它使用硬编码到客户端的公钥来验证用于许可目的的签名。那么你究竟想实现什么? – CodesInChaos
公钥本身是存储在服务器上的RSA密钥对的公共部分。 加密的消息是在服务器上创建的,方法是先对对象进行JSON编码,然后使用带有OPENSSL_PKCS1_PADDING的私钥加密,然后使用base64编码,然后再次作为最终消息的一部分进行JSON编码。 消息和公钥存储在客户端上。我想要的是通过使用公钥解密客户端上的消息。 正如我所说,我不是很擅长这个问题,所以我可能试图做错误的方式:\ – Madoc