我正在使用OpenSSL RSA API用服务器的公钥加密数据。
uint32_t rsasize = RSA_size(keypair); // -- RSA key size == 256
uint32_t dl = 255
uint8_t *d; // points to 255 bytes of data
unsigned char *encrypt = (unsigned char*)malloc(rsasize);
auto num = RSA_public_encrypt(dl, d, encrypt, keypair, RSA_NO_PADDING);
if ( num == -1 )
{
auto err = malloc(130);
ERR_load_crypto_strings();
ERR_error_string(ERR_get_error(), (char*)err);
printf("Error encrypting message: %s\n", err);
return nullptr;
}
我使用的是RSA_NO_PADDING
,所以RSA应该可以轻松地用256字节的公钥加密255字节。但我收到了:
Error encrypting message: error:0406B07A:rsa routines:RSA_padding_add_none:data too small for key size
我改变dl(data_lenght)到256(只有1),我得到了这个:
Error encrypting message: error:04068084:rsa routines:RSA_EAY_PUBLIC_ENCRYPT:data too large for modulus
我知道RSA可以用256个密钥编码255个字节。有什么问题吗?
你填错了。如果您有255字节的数据,并且希望将其填充到256字节,那么应该在高阶端添加一个零字节。换句话说,应该在d[0]之前插入一个0。
这是我的密码 抱歉,如果我的代码一团糟。
问题内容: 我正在编写一个用于传输文件的小型应用程序,或多或少地将其作为一种学习更多编程加密基础的方法。这个想法是生成一个RSA密钥对,交换公共密钥,并发送AES iv和密钥以进一步解密。我想用接收者的RSA公钥加密AES密钥,如下所示: 然后,我将密钥值写给接收器,并按如下方式解密: 在控制台的另一端,我将其作为输出: 此外,如果我创建一个大小为16的字节数组,并将cipher.doFinal(
并且我将这个函数称为用RSA公钥加密DSA密钥的函数:
我需要在C#中加密数据,以便将其传递给Java。Java代码属于第三方,但我得到了相关的源代码,因此我决定,由于Java使用Bouncy Castle库,所以我将使用C#端口。 解密工作正常。但是,解密仅在使用私钥使用encrypt时有效,而不是使用公钥。使用公钥时,解密失败,出现。 编辑: 我还添加了一个单元测试,它证明公钥等于从私钥中提取的公钥:
本文向大家介绍基于私钥加密公钥解密的RSA算法C#实现方法,包括了基于私钥加密公钥解密的RSA算法C#实现方法的使用技巧和注意事项,需要的朋友参考一下 本文实例讲述了基于私钥加密公钥解密的RSA算法C#实现方法,是一种应用十分广泛的算法。分享给大家供大家参考之用。具体方法如下: 一、概述 RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作。 RSA是被研究得最广泛的公钥算法,从提出
我使用Delphi XE和Lockbox3.5,我想加密一个字符串,该字符串具有支付网关提供的公钥,需要操作,公钥类似于:------开始公钥------这里的职员------结束公钥------我无法使RSA编解码器读取该公钥,我的代码如下: 编解码器cdcRA链接到CryptoLibrary,密码为(RSA公钥加密系统*),链接模式为空,但此代码失败,并出现内存不足错误。谢谢你的提示。。 演示