我有两个与套接字连接的进程。我使用RSA来加密和解密消息。客户端具有以下键:
RSA *client_private_key;
RSA *client_public_key;
RSA *server_public_key;
我想要做的是首先使用客户端的私钥加密明文,然后加密服务器的公钥。
unsigned char *plaintext =
(unsigned char *)"Hello";
int encrypted_length= rsa_prv_encrypt(plaintext, strlen(plaintext), client_private_key, encrypted);
int encrypted_length2 = rsa_pub_encrypt(encrypted, encrypted_length, server_public_key, encrypted2);
encrypted_length2始终为-1,这意味着加密出了问题。
我测试了以下方案以确保函数正常工作: 使用客户端私钥加密 - >使用客户端公钥解密 使用客户端公钥加密 - >使用客户端私钥解密
然而,双重加密似乎不起作用,我不知道为什么。 知道可能是什么问题,第二个函数总是返回-1?
RSA无法加密大于密钥大小的数据。例如,RSA 4096密钥只能加密4096位数据。
但是,将保留11个字节用于填充。因此,例如,您可以使用4096位RSA密钥加密的最大有效负载为501字节。类似地,RSA 2048位密钥的限制为245字节。
RSA加密的输出始终等于密钥大小(例如512或256字节)。
这意味着您不能使用相同大小的密钥加密RSA加密的blob,除非您执行“raw rsa encryption”,它不执行填充(因为256> 245和512> 501)。
但是,如果要对数据进行签名,最好计算一个sha,然后对sha进行签名,而不是尝试使用unpadded加密。