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));
posted @ 2020-12-16 22:47  指左转右  阅读(260)  评论(0编辑  收藏  举报