我使用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的字段。
如何获取解密的消息?
答案 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]);
}