从RSA_public_decrypt获得解密的消息?

时间:2019-03-23 00:44:38

标签: openssl

我使用RSA_sign()对缓冲区中的消息进行了签名/加密。

当我使用RSA_public_decrypt()解密缓冲区时,返回的值是摘要(X509_SIG),而不是解密的消息。

我想从摘要中获取消息。在较旧的OpenSSL版本中,我会打电话给

// covert raw signature buffer into a digest
X509_SIG sig = d2i_X509_SIG(NULL, signature, signature_size); 
// display every byte in the message
// Unfortunately, I'm accessing X509_SIG fields.
for (i = 0; i < sig->digest->length; i++) {
    printf("byte #%d is %.2x\n", sig->digest->data[i]); 
}

但是OpenSSL进行了更改,我不再可以访问X509_SIG的字段。

如何获取解密的消息?

1 个答案:

答案 0 :(得分:0)

这适用于OpenSSL v1.1.1,使用@ dave_thompson_085关于最后摘要大小字节的建议。

如果对RSA_public_decrypt的呼叫看起来像

decrypt_size = RSA_public_decrypt(encrypted_len, encrypted_buf, to, rsa, padding);

然后

const EVP_MD *md = EVP_sha1();
unsigned int length= EVP_MD_size(md);
// skip over digest header to get to data
unsigned char *data = to + decrypt_size - length;
for (i = 0; i < length; i++) {
    printf("byte #%d is %.2x\n", data[i]); 
}