gpt4 book ai didi

C# - 使用 RSA 加密和解密数据

转载 作者:行者123 更新时间:2023-11-30 14:59:48 25 4
gpt4 key购买 nike

我在 C# 中有以下代码:

主类

X509Certificate2 cert = new X509Certificate2("C:/test.pfx", "hello", X509KeyStorageFlags.Exportable | X509KeyStorageFlags.PersistKeySet);

Encryption enc = new Encryption();
string encrypted = enc.Encrypt("hello there", cert);
string decrypted = enc.Decrypt(encrypted, cert);
Console.WriteLine("Encrypted Text: " + encrypted);
Console.WriteLine("Decrypted Text: " + decrypted);

加密类

public string Encrypt(string plainText, X509Certificate2 cert)
{
RSACryptoServiceProvider publicKey = (RSACryptoServiceProvider)cert.PublicKey.Key;
byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
byte[] encryptedBytes = publicKey.Encrypt(plainBytes, false);
string encryptedText = encryptedBytes.ToString();
return encryptedText;
}

public string Decrypt(string encryptedText, X509Certificate2 cert)
{
RSACryptoServiceProvider privateKey = (RSACryptoServiceProvider)cert.PrivateKey;
byte[] encryptedBytes = Encoding.UTF8.GetBytes(encryptedText);
byte[] decryptedBytes = privateKey.Decrypt(encryptedBytes, false);
string decryptedText = decryptedBytes.ToString();
return decryptedText;
}

如您所见,在主类中我正在导入一个证书。然后我正在创建加密类的一个实例。然后我将明文连同证书一起传递给 Encrypt 方法以获得加密文本。之后,我将加密文本传递给 Decrypt 方法以取回明文。

我的问题是打印加密文本的结果是 System.[]Byte(如果我注释掉解密调用)。如果我不注释掉解密调用,我会在解密方法中收到加密异常:错误数据。

我猜 encryptedBytes 数组没有正确转换为字符串。此外,我不确定我是否正确地形成了 RSAEncryptionProvider。请问我该如何解决这个问题?

更新

我解决了一个问题。从字节数组转换为字符串时,我不得不使用 Encoding.UTF8.GetString(EncryptedBytes)。现在的问题是解密方法给我另一个密码异常(他要解密的数据超过了这个模数的最大值 128 字节)。

有人知道为什么会发生这种情况以及如何解决吗?

最佳答案

您可以使用base64格式通过替换函数来转换变量(encryptedText)参数的类型

public string Encrypt(string plainText, X509Certificate2 cert)
{
RSACryptoServiceProvider publicKey = (RSACryptoServiceProvider)cert.PublicKey.Key;
byte[] plainBytes = Encoding.UTF8.GetBytes(plainText);
byte[] encryptedBytes = publicKey.Encrypt(plainBytes, false);
string encryptedText = Convert.ToBase64String(encryptedBytes);
return encryptedText;
}

public string Decrypt(string encryptedText, X509Certificate2 cert)
{
RSACryptoServiceProvider privateKey = (RSACryptoServiceProvider)cert.PrivateKey;
byte[] encryptedBytes = Convert.FromBase64String(encryptedText);
byte[] decryptedBytes = privateKey.Decrypt(encryptedBytes, false);
string decryptedText = Encoding.UTF8.GetString(decryptedBytes);
return decryptedText;
}

关于C# - 使用 RSA 加密和解密数据,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16261819/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com