ivy*_*ivy 7 c encryption openssl cryptography rsa
我写了一个简单的测试程序来加密/解密消息.
我有一个keylength:
int keylength = 1024; // it can also be 2048, 4096
和最大输入长度:
int maxlen = (keylength/8)-11;
我知道我的输入大小应该<而不是maxlen,如下所示:
if(insize >= maxlen)
printf("cannot encrypt/decrypt!\n");
Run Code Online (Sandbox Code Playgroud)
我的问题很简单 - 是否有可能(如果是这样,我该怎么做)加密/解密RSA消息比maxlen?
主代码也非常简单,但仅在insize <maxlen时有效:
if((encBytes=RSA_public_encrypt(strlen(buff1)+1, buff1, buff2, keypair, RSA_PKCS1_PADDING)) == -1)
{
printf("error\n");
}
if((decBytes=RSA_private_decrypt(encBytes, buff2, buff3, keypair, RSA_PKCS1_PADDING)) == -1)
{
printf("error\n");
}
Run Code Online (Sandbox Code Playgroud)
加密长消息需要组合方案 - RSA算法加密会话密钥(即AES密钥),数据本身用该密钥加密.我建议不要发明另一辆自行车并使用完善的方案,即PKCS#7/CMS或OpenPGP,具体取决于您的需求.
您将能够使用RSA加密长消息,就像使用分组密码一样。也就是说,以块的形式对消息进行加密,并使用适当的链接模式绑定块。然而,这不是通常的方法,并且您在使用的库中找不到对它的支持(RSA 链接)。
由于RSA速度相当慢,因此加密大消息的常用方法是使用混合加密。在混合加密中,您使用快速对称加密算法(如AES)通过随机密钥加密数据。然后使用RSA加密随机密钥并与对称密钥加密数据一起发送。
编辑:
至于你的实施之前,你有insize = 1300和 ,keylength = 1024它给出了maxlen = 117。要加密完整消息,您需要 12 次加密,每次加密产生 128 字节,加密大小为 1536 字节。在您的代码中,您仅分配 1416 字节的缓冲区。另外,您似乎不允许 128 字节输出,因为您仅在以下位置增加 117:
RSA_public_encrypt(maxlen, buff1+i, buff2+i, keypair, RSA_PKCS1_PADDING)
Run Code Online (Sandbox Code Playgroud)
和
i += maxlen;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
4850 次 |
| 最近记录: |