【发布时间】:2020-11-03 01:15:47
【问题描述】:
请帮我找出以下 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); ;
}
【问题讨论】:
-
EncryptText()如何接受"Kamran"作为其dataToEncrypt参数,其类型为byte[]? - 请出示您的实际代码。 -
这能解决问题吗?因为它在我的机器上运行。如果没有,请发布确切的错误消息/堆栈跟踪和 .NET 版本。
-
这在 RSA 中是不可能的,请参阅 How to encrypt large file with RSA?
-
我不需要尝试任何东西。这不可能!使用 1024 位 RSA 密钥,最多可以加密 128 个字节(取决于填充甚至更少,例如,对于 PKCS#1 v1.5,在您的情况下只有 117 个字节),请参阅here。
-
请记住,对于较大的 RSA 密钥,性能会降低。您可以测试 8192 位密钥(1024 字节,Pkcs#1 v1.5 的最大有效负载:1013 字节)。通常,像 AES 这样的对称加密适用于较大的数据量。如有必要,可以使用 RSA 安全地交换对称密钥(混合加密)。这在首先发布的链接中有所描述。