.MET Core RSA加密解密

Posted AingHub

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了.MET Core RSA加密解密相关的知识,希望对你有一定的参考价值。

RSA加密解密

Nuget 引入 XC.RSAUtil

博客园参考文章1

生成公私钥对

// 生成公私钥对
// XML
Console.WriteLine(RsaKeyGenerator.XmlKey(2048)[0]);
Console.WriteLine("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
Console.WriteLine(RsaKeyGenerator.XmlKey(2048)[1]);
Console.WriteLine("================================================================================");
// Pkcs1
Console.WriteLine(RsaKeyGenerator.Pkcs1Key(2048, true)[0]);
Console.WriteLine("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
Console.WriteLine(RsaKeyGenerator.Pkcs1Key(2048, true)[1]);
Console.WriteLine("================================================================================");
// Pkcs8
Console.WriteLine(RsaKeyGenerator.Pkcs8Key(2048, true)[0]);
Console.WriteLine("++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++");
Console.WriteLine(RsaKeyGenerator.Pkcs8Key(2048, true)[1]);

RSA 加密,解密,签名和验签

/// <summary>
/// RSA 加密,解密,签名和验签
/// </summary>
public static void RSASignFunc(string privateKey, string publicKey, EnumUserType enumUserType)

    Encoding.RegisterProvider(CodePagesEncodingProvider.Instance);
    switch (enumUserType)
    
        case EnumUserType.xml:
            RsaXmlUtil rsaXmlUtil = new RsaXmlUtil(Encoding.UTF8, publicKey, privateKey);
            var encrypt = rsaXmlUtil.Encrypt("123456789", RSAEncryptionPadding.Pkcs1);
            var encryptInput = rsaXmlUtil.Decrypt(encrypt, RSAEncryptionPadding.Pkcs1);
            Console.Write("XML加解密是否成功:");
            Console.WriteLine(encryptInput is "123456789");
            var sign = rsaXmlUtil.SignData("987654321", HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
            var verifyData = rsaXmlUtil.VerifyData("987654321", sign, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
            Console.Write("XML签名是否成功");
            Console.WriteLine(verifyData);
            break;
        case EnumUserType.pkcs1:
            RsaPkcs1Util rsaPkcs1Util = new RsaPkcs1Util(Encoding.UTF8, publicKey, privateKey);
            var encrypt2 = rsaPkcs1Util.Encrypt("123456789", RSAEncryptionPadding.Pkcs1);
            var encryptInput2 = rsaPkcs1Util.Decrypt(encrypt2, RSAEncryptionPadding.Pkcs1);
            Console.Write("PKCS1加解密是否成功:");
            Console.WriteLine(encryptInput2 is "123456789");
            var sign2 = rsaPkcs1Util.SignData("987654321", HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
            var verifyData2 = rsaPkcs1Util.VerifyData("987654321", sign2, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
            Console.Write("PKCS1签名是否成功");
            Console.WriteLine(verifyData2);
            break;
        default:
            RsaPkcs8Util rsaPkcs8Util = new RsaPkcs8Util(Encoding.UTF8, publicKey, privateKey);
            var encrypt3 = rsaPkcs8Util.Encrypt("123456789", RSAEncryptionPadding.Pkcs1);
            var encryptInput3 = rsaPkcs8Util.Decrypt(encrypt3, RSAEncryptionPadding.Pkcs1);
            Console.Write("PKCS8加解密是否成功:");
            Console.WriteLine(encryptInput3 is "123456789");
            var sign3 = rsaPkcs8Util.SignData("987654321", HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
            var verifyData3 = rsaPkcs8Util.VerifyData("987654321", sign3, HashAlgorithmName.SHA256, RSASignaturePadding.Pkcs1);
            Console.Write("PKCS8签名是否成功");
            Console.WriteLine(verifyData3);
            break;
    

RSA密钥转换

XML-> Pkcs1私钥:RsaKeyConvert.PrivateKeyXmlToPkcs1()
公钥:RsaKeyConvert.PublicKeyXmlToPem()

XML-> Pkcs8私钥:RsaKeyConvert.PrivateKeyXmlToPkcs8()
公钥:RsaKeyConvert.PublicKeyXmlToPem()

Pkcs1-> XML私钥:RsaKeyConvert.PrivateKeyPkcs1ToXml()
公钥:RsaKeyConvert.PublicKeyPemToXml()

Pkcs1-> Pkcs8私钥:RsaKeyConvert.PrivateKeyPkcs1ToPkcs8()
公钥:不需要转换

Pkcs8-> XML私钥:RsaKeyConvert.PrivateKeyPkcs8ToXml()
公钥:RsaKeyConvert.PublicKeyPemToXml()

Pkcs8-> Pkcs1私钥:RsaKeyConvert.PrivateKeyPkcs8ToPkcs1()
公钥:不需要转换

以上是关于.MET Core RSA加密解密的主要内容,如果未能解决你的问题,请参考以下文章

无法在 .Net Core 中使用 RSA 私钥解密连接字符串

.NET Core RSA密钥的xmlpkcs1pkcs8格式转换和JavaScriptJava等语言进行对接

.NET Core RSA密钥的xmlpkcs1pkcs8格式转换和JavaScriptJava等语言进行对接

可以解密加密数据的片段吗?

rsa解密错误

Go-RSA加密解密详解与代码