C#实现RSA加解密,验证同Cryptopp561的一致性成功

41 篇文章 1 订阅
24 篇文章 0 订阅
 /*
     * 功能:C#实现RSA加解密,验证同Cryptopp561的一致性(成功)
     *       研究目的:异构软件之间,如何保证数据在网络上的安全通讯。
     * 作者:李军
     * 时间:2012-07
     * 说明:警告,仅使用本代码段是无法保证数据通讯安全的,请参考相关资料!
     */
    class RSACryption
    {
        private System.Security.Cryptography.RSACryptoServiceProvider m_rsa = new RSACryptoServiceProvider();

        private String Byte2Str(Byte[] arrayB)
        {
            StringBuilder sb = new StringBuilder();
            String s2;

            foreach (Byte b in arrayB)
            {
                s2 = b.ToString("X");
                if (s2.Length == 1)
                    sb.Append("0");

                sb.Append(s2);
            }
            return sb.ToString();
        } 

        //需要重构m_rsa才会产生新的PubKey和PriKey
        public String RSA_PubKey()
        {
            String pubKey = m_rsa.ToXmlString(false);
    
            return pubKey;
        }

        //把公钥拆分为Modulus,Exponent两部份分别传给Crypotpp561库,用于明文加密
        //WinXPSP3+VS2008SP1环境下,C++程序中测试通过!
        public void RSA_PubKey(out String strModulus,out String strExponent)
        {
            RSAParameters rp = m_rsa.ExportParameters(false);

            strModulus = Convert.ToBase64String(rp.Modulus);
            strExponent = Convert.ToBase64String(rp.Exponent);
        }

        public String RSA_PriKey()
        {
            return m_rsa.ToXmlString(true);
        }

        //RSA 方式加密 
        //KEY必须是XML的行式的字符串,明文有 长度 限制。
        public string RSAEncrypt(String xmlPublicKey, String plainText)
        {

            byte[] PlainTextBArray;
            byte[] CypherTextBArray;
            string Result;
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.FromXmlString(xmlPublicKey);
            PlainTextBArray = System.Text.UTF8Encoding.UTF8.GetBytes(plainText);
            CypherTextBArray = rsa.Encrypt(PlainTextBArray, true);
            Result = Convert.ToBase64String(CypherTextBArray);
            return Result;
        }

        public string RSADecrypt(String xmlPrivateKey, String cipherText)
        {
            byte[] PlainTextBArray;
            byte[] DypherTextBArray;
            string Result;
            System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.FromXmlString(xmlPrivateKey);
            PlainTextBArray = Convert.FromBase64String(cipherText);
            DypherTextBArray = rsa.Decrypt(PlainTextBArray, true);
            Result = System.Text.UTF8Encoding.UTF8.GetString(DypherTextBArray);
            return Result;
        }
    }


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

kagula086

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值