在以下示例中,我們使用一個RSA 256-bit
private key
來加密不帶填充的32字節消息,並將結果存儲在同一個內存塊中。RSA_private_encrypt中的可能錯誤
#include <openssl/ssl.h>
unsigned char err[256],
msg[] = "This is a message of some sort.",
key[] = "-----BEGIN RSA PRIVATE KEY-----\n"\
"MIGrAgEAAiEA6sZFpHqqFkpskc2GNMl6RHdiEuOqlX3LcW1TnYVgQFECAwEAAQIh\n"\
"AKqoe8FHJVJUwTzvMAo5FrU/t6Cc6GwYDELpU3xxs4nBAhEA+TwHM5ArwBgTtB2y\n"\
"AKlEKQIRAPElwlKWyde1KqHRCjOWX+kCEQDqWYZP9rUcp8cHKpDwTDiZAhBPldOd\n"\
"KDCzJRJN10yTm/RJAhANYsX4BteC/W7VRUjV5jSH\n"\
"-----END RSA PRIVATE KEY-----\n";
void main()
{
//msg[0] = 255;
if (RSA_private_encrypt(32, msg, msg,
PEM_read_bio_RSAPrivateKey(BIO_new_mem_buf(key, -1), NULL, NULL, NULL),
RSA_NO_PADDING) != 32)
{
ERR_load_crypto_strings();
ERR_error_string(ERR_get_error(), err);
puts(err);
}
}
當我們通過刪除註釋改變0個信息字符的值,加密失敗消息:
rsa routines:RSA_EAY_PRIVATE_ENCRYPT:data too large for modulus
注意,很短的RSA
鍵和硬編碼的消息長度僅用於證明問題。密鑰是使用openssl
二進制生成的,而function
也會因不同大小的密鑰而失敗(對於4096位密鑰,the msg[0] = 192
會導致失敗)。
似乎函數將消息的開頭解釋爲長度描述符,即使明確指出了RSA_NO_PADDING
。這是一個錯誤?
您沒有256位模數,您的模數爲255.875位。 –