RSA 加密解密记录
参考文档
https://docs.microsoft.com/zh-cn/dotnet/api/system.security.cryptography.rsacryptoserviceprovider?view=net-5.0
https://blog.csdn.net/github_35454460/article/details/51862470
RSA 加密长度有限,一般只使用在重要的数据上,过长需要拼接。
C#加密解密简单方法
生成公钥及密钥
private static void Create()
{
RSACryptoServiceProvider rsa = new();
// 生成公钥。
string public_Key = Convert.ToBase64String(rsa.ExportCspBlob(false));
// 生成私钥。
string private_Key = Convert.ToBase64String(rsa.ExportCspBlob(true));
// PKCS1 公钥。
var pck = Convert.ToBase64String(rsa.ExportRSAPublicKey());
// PKCS1 私钥。
var pvk = Convert.ToBase64String(rsa.ExportRSAPrivateKey());
}
加密解密
OAEP
var msg = "加密测试信息";
RSACryptoServiceProvider rSA = new();
// 使用RSA加密。
rSA.ImportCspBlob(Convert.FromBase64String(pck1));
var msgEncryptBytes = rSA.Encrypt(Encoding.UTF8.GetBytes(msg), true);
var msgEncrypt = Convert.ToBase64String(msgEncryptBytes);
rSA.ImportCspBlob(Convert.FromBase64String(pvk1));
var msgDecryptBytes = rSA.Decrypt(Convert.FromBase64String(msgEncrypt), true); ;
Console.WriteLine(Encoding.UTF8.GetString(msgDecryptBytes));
PKCS
注意:不确定这样使用是否正确,但是确实可以用。没有实际用到,所以不深究。
var msg = "加密测试信息";
RSACryptoServiceProvider rSA = new();
// 使用RSA PKCS1加密。
rSA.ImportRSAPublicKey(Convert.FromBase64String(pck1), out var _);
var msgEncryptBytes = rSA.Encrypt(Encoding.UTF8.GetBytes(msg), false); // 此处选择false。
var msgEncrypt = Convert.ToBase64String(msgEncryptBytes);
rSA.ImportRSAPrivateKey(Convert.FromBase64String(pvk1), out var _);
var msgDecryptBytes = rSA.Decrypt(Convert.FromBase64String(msgEncrypt), false); // 此处选择false。
Console.WriteLine(Encoding.UTF8.GetString(msgDecryptBytes));