请帮助我识别以下RSA加密代码中的问题
public static void Test()
{
CspParameters cspParams = new CspParameters { ProviderType = 1 };
RSACryptoServiceProvider rsaProvider = new RSACryptoServiceProvider(1024, cspParams);
var PublicKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(false)); //I have to save it as string in some json/app.config configuration file
var PrivateKey = Convert.ToBase64String(rsaProvider.ExportCspBlob(true)); //I have to save it as string in some json/app.config configuration file
var encrypt = EncryptText(PublicKey, Encoding.UTF8.GetBytes(FromSomeFile()));
var decrypt = DecryptData(PrivateKey, encrypt);
}
static byte[] EncryptText(string publicKey, byte[] dataToEncrypt)
{
byte[] encryptedData;
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.ImportCspBlob(Convert.FromBase64String(publicKey));
encryptedData = rsa.Encrypt(dataToEncrypt, false);
}
return encryptedData;
}
// Method to decrypt the data withing a specific file using a RSA algorithm private key
static string DecryptData(string privateKey, byte[] dataToDecrypt)
{
// Create an array to store the decrypted data in it
byte[] decryptedData;
using (RSACryptoServiceProvider rsa = new RSACryptoServiceProvider())
{
rsa.ImportCspBlob(Convert.FromBase64String(privateKey));
decryptedData = rsa.Decrypt(dataToDecrypt, false);
}
return Encoding.UTF8.GetString(decryptedData, 0, decryptedData.Length); ;
}
RSA只能用于加密长度小于模的消息。小多少取决于填充,例如,在PKCS#1 v1.5的情况下,11个字节。在OAEP的情况下,填充声明的字节数取决于所使用的摘要,这里是。RFC8017、RSAES-PKCS1-v1_5和RSAES-OAEP中描述了详细信息。
为了完整起见:没有填充的RSA(教科书RSA)允许将消息加密到模数的确切长度。然而,在实践中,出于安全原因,必须始终使用填充,因此教科书RSA不是一个真正的选项。
发布的代码使用1024位的RSA密钥和PKCS#1 v1。5.填充物。因此,要加密的消息的最大大小为117字节。较大的消息抛出加密异常(错误长度)。这就是你的问题所在。
8192位(1024字节)的密钥理论上允许使用PKCS#1v1对长度高达1013字节的消息进行加密。5.填充物。但是,随着密钥大小的增加,性能会急剧下降。
对称加密比非对称加密性能更好。因此,在实践中,使用对称加密(例如AES)对较大的数据卷进行加密。然而,对称加密存在通信伙伴必须交换对称密钥的问题。非对称加密(例如RSA)通常用于此目的(混合加密),因为加密只需要公钥(因此可以在不安全的通道上交换公钥)。然而,为了防止公钥的欺骗性替换(中间人攻击),通常需要一个复杂的公钥基础设施。
我尝试获得一对密钥(公共和私有)来加密/解密文本。对于加密没有问题。对于解密来说,我从一天开始就犯了一个错误,我不明白为什么。 这是代码的相关部分:
问题内容: 我正在使用3DESC解密数据,但出现以下异常 我的代码: 打印上面使用的所有字节数组 问题答案: DES- EDE密码可与3个不同的子密钥一起使用,因此密钥大小应为24字节(3乘8字节)。如果您只想使用2个键(即在此模式下,第一个键==最后一个键),则只需复制键数组的前8个字节。
在一个做其他事情的大型应用程序中——我需要加密和解密一个文件。所以我一直在四处寻找,并实现了这两个核心功能,基本上使用RSA密钥包装一个随机的AES密钥来加密一个文件。对称键和iv被写入文件的开头。 我在下面的解密函数部分得到一个异常(“javax.crypto.BadPaddingException:Decryption error”)。在肯安迪夫线路上——doFinal。具体来说,这一行是异常
我收到一个错误解密在C#中加密的消息(使用相应的公钥/私钥) 我的客户端是用C编写的,服务器是用Go编写的。我通过go的crypto/rsa包生成了一个私钥和公钥(使用rsa.GenerateKey(随机读取器,bits int))。然后,我将生成的公钥文件存储在客户端可以访问的地方,将私钥存储在服务器可以访问的地方。我使用以下代码(使用bouncy castle)在客户端上加密: go服务器从标
我的应用程序在打开时会生成一个。我可以使用加密文本,但当我尝试使用解密时,它会抛出。 某些调试: 生成: 函数: 函数:
我有一个没有Java加密库的RSA代码类。很管用。 但是,当我从RSAPrivateKeySpec创建一个Java库PrivateKey,从类中的RSAPrivateKey创建一个模数和指数,并使用Java加密库a使用类encrypted BigInteger进行加密时,它会抛出。这里: 为什么? 对不起,我的英语不好