C#使用pem格式的密钥对文件来做RSA加解密接签名和验证签名


C#使用pem格式的密钥对文件来做RSA加解密接签名和验证签名,这里的pem文件是openssl命令生成的密钥对文件,其中私钥pem文件需要用openssl命令转换成pkcs8格式的pem文件。如果已有pem文件,也可以通过openssl命令转换成pkscs8格式的。转换命令为:openssl pkcs8 -topk8 -inform PEM -in private_key.pem -outform PEM -nocrypt -out private_pk8.pem 完整的C#代码,vs2008工程,可编译和测试。
资源截图
代码片段和文件信息
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Globalization;
using Org.BouncyCastle.Crypto;
using Org.BouncyCastle.Crypto.Parameters;
using Org.BouncyCastle.Math;
using Org.BouncyCastle.Security;
using System.Security.Cryptography;

namespace RSAPem测试
{
    class Program
    {
        static void Main(string[] args)
        {
            /**RSA加密测试RSA中的密钥对通过SSL工具生成,生成命令如下: 
            * 1 生成RSA私钥: 
            * openssl genrsa -out private_key.pem 1024 
            * 
            *2 得到RSA公钥 
            * openssl rsa -in private_key.pem -pubout -out public_key.pem 
            * 
            * 3 将RSA私钥转换成PKCS8格式 
            * openssl pkcs8 -topk8 -inform PEM -in private_key.pem -outform PEM -nocrypt -out private_pk8.pem 
            * 
            * 打开private_pk8.pem和pub_pk8.pem文件拷贝内容,去掉头和尾,将换行符删除,按照如下的格式写
            * */
            //private_pk8.pem内容,去掉头和尾,将换行符删除
            string privatekey = “MIICdgIBADANBgkqhkiG9w0BAQEFAASCAmAwggJcAgEAAoGBALmGxRTvMvpFLeVHEGPaxOc5feo7JHYzp58JxYr2y4WhleRBcaXwDuTU6m/LIyc8TPpegLgpLxdPyz6vuqeCqyyrSbH3TtYbkV54uZApIzT1rJN5F6V6dyriJxHBwzLzTx9n9LDaVuvyCaSEA8Ws6MdJ2Y4WfT6OPcDBLEtvsifJAgMBAAECgYBLym+2xqUnsp02PhrHADdSUp1K1BBoLV/7y40k4P9xvvox/j5EUNZ0yzpeozjgLXUxDuw8z65KMrHQERAKoIn2iZ0RxcDjrCG0ihRrTOljtVJTpf/s7gsKFR5wUzpoWCDQGAZLqhbcRnFZdlJ8T8HkifE/Dnee3jtkndEG3dqmUQJBAPGXP/ZRNppBa9YILH/ammHVXlf690fSNR6g2nEjhm7bkuLcG1D7EUVBbaf6kvNti0vtwkvITE7RhevXLOfj7l0CQQDEl38MRuaz3zKFO7K5qBBJcu62bLuuLKujfK27eu6Ekvx4y7WrmrrGDFMNEdh3u2REn6Uz7cJ80509+yUjjdBdAkAMLQpNOMSeu6NasyjC/NqBCcbqejySQxboR0UbJKY22hwqENvTlgPF0MldCPT1DdVSa1Y6iYrHAipUu5CI02UFAkAU/GcflGIESYtHFbxafUpfzNkWuDzAtxwLc7/IB7N2i4pQCs715qqRgbdL6d/FyEdH3BLynCrq0Fw0xZ6NURIxAkEAqfutNMv4ch3qen2X0Xlh59eYlUwObj7NnGHvMwQFk11YC6bZXUVQmNA0N5JgCApWAQFafROCjWyIy1jLhzRGFg==“;
            //public_key.pem内容,去掉头和尾,将换行符删除
            string publickey = “MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC5hsUU7zL6RS3lRxBj2sTnOX3qOyR2M6efCcWK9suFoZXkQXGl8A7k1OpvyyMnPEz6XoC4KS8XT8s+r7qngqssq0mx907WG5FeeLmQKSM09ayTeRelencq4icRwcMy808fZ/Sw2lbr8gmkhAPFrOjHSdmOFn0+jj3AwSxLb7InyQIDAQAB“;
            
            //加密字符串  
            string plaintext = “hahah123124“;

            //加密 和解密
            string encode = RSAUtils.encryptData(plaintext publickey “UTF-8“);
            string decode = RSAUtils.decryptData(encode privatekey “UTF-8“);
            Console.WriteLine(plaintext.Equals(decode));

            //签名  
            string src = “20180522201658IMFINE“;
            string sign = RSAUtils.sign(src privatekey “UTF-8“);
            Console.WriteLine(“签名:“ + sign);

            bool st = RSAUtils.verify(src sign publickey “UTF-8“);
            Console.WriteLine(“验签结果:“+st);

            Console.ReadLine();
        }
        
    }
}

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       3094  2019-05-06 14:37  Program.cs

     文件       2778  2019-05-06 14:34  RSAPem测试.csproj

     文件        913  2019-05-06 14:36  RSAPem测试.sln

    ..A..H.     11776  2019-05-06 14:42  RSAPem测试.suo

     文件      17111  2019-05-06 14:36  RSAUtils.cs

     文件    2236416  2015-12-28 21:38  binDebugBouncyCastle.Crypto.dll

     文件      12800  2019-05-06 14:36  binDebugRSAPem测试.exe

     文件      48640  2019-05-06 14:36  binDebugRSAPem测试.pdb

     文件      14328  2019-05-06 14:36  binDebugRSAPem测试.vshost.exe

     文件        490  2009-06-11 05:14  binDebugRSAPem测试.vshost.exe.manifest

     文件       2715  2019-03-27 12:00  objDebugResolveAssemblyReference.cache

     文件        744  2019-05-06 14:36  objDebugRSAPem测试.csproj.FileListAbsolute.txt

     文件      12800  2019-05-06 14:36  objDebugRSAPem测试.exe

     文件      48640  2019-05-06 14:36  objDebugRSAPem测试.pdb

     文件       1374  2019-03-19 15:09  PropertiesAssemblyInfo.cs

     文件    2236416  2015-12-28 21:38  SharpPcapBouncyCastle.Crypto.dll

     文件     196608  2013-01-14 19:59  SharpPcapPacketDotNet.dll

     文件     476563  2013-01-14 19:59  SharpPcapPacketDotNet.xml

     文件      72704  2013-01-14 19:59  SharpPcapSharpPcap.dll

     文件        492  2013-01-14 19:59  SharpPcapSharpPcap.dll.config

     文件     827393  2018-06-02 15:13  SharpPcapSharpPcap.rar

     文件     186728  2013-01-14 19:59  SharpPcapSharpPcap.xml

     文件     114688  2014-04-13 19:08  SharpPcapSnmpSharpNet.dll

     目录          0  2019-03-19 15:55  objDebugRefactor

     目录          0  2019-03-19 15:09  objDebugTempPE

     目录          0  2019-05-06 14:36  binDebug

     目录          0  2019-05-06 14:36  objDebug

     目录          0  2019-05-06 14:28  bin

     目录          0  2019-05-06 14:28  obj

     目录          0  2019-05-06 14:28  Properties

............此处省略4个文件信息

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。

发表评论

评论列表(条)