получать расшифрованное сообщение от RSA_public_decrypt? - PullRequest
0 голосов
/ 23 марта 2019

Я подписал / зашифровал сообщение в буфере с помощью 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 голосов
/ 29 марта 2019

Это работает для 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]); 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...