码迷,mamicode.com
首页 > Windows程序 > 详细

C#实现RSA加密和解密详解

时间:2016-06-06 10:33:11      阅读:510      评论:0      收藏:0      [点我收藏+]

标签:

1.生成一对keys:

        /// <summary>
        /// generate private key and public key arr[0] for private key arr[1] for public key
        /// </summary>
        /// <returns></returns>
        public static string[] GenerateKeys()
        {
            string[] sKeys = new String[2];
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            sKeys[0] = rsa.ToXmlString(true);
            sKeys[1] = rsa.ToXmlString(false);
            return sKeys;
        } 

  

2.加密:

        /// <summary>
        /// RSA Encrypt
        /// </summary>
        /// <param name="sSource" >Source string</param>
        /// <param name="sPublicKey" >public key</param>
        /// <returns></returns>
        public static string EncryptString(string sSource, string sPublicKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            string plaintext = sSource;
            rsa.FromXmlString(sPublicKey);
            byte[] cipherbytes;
            byte[] byteEn = rsa.Encrypt(Encoding.UTF8.GetBytes("a"), false);
            cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(plaintext), false);

            StringBuilder sbString = new StringBuilder();
            for (int i = 0; i < cipherbytes.Length; i++)
            {
                sbString.Append(cipherbytes[i] + ",");
            }
            return sbString.ToString();
        }

  

3. 解密:

        /// <summary>
        /// RSA Decrypt
        /// </summary>
        /// <param name="sSource">Source string</param>
        /// <param name="sPrivateKey">Private Key</param>
        /// <returns></returns>
        public static string DecryptString(String sSource, string sPrivateKey)
        {
            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
            rsa.FromXmlString(sPrivateKey);
            byte[] byteEn = rsa.Encrypt(Encoding.UTF8.GetBytes("a"), false);
            string[] sBytes = sSource.Split(‘,‘);

            for (int j = 0; j < sBytes.Length; j++)
            {
                if (sBytes[j] != "")
                {
                    byteEn[j] = Byte.Parse(sBytes[j]);
                }
            }
            byte[] plaintbytes = rsa.Decrypt(byteEn, false);
            return Encoding.UTF8.GetString(plaintbytes);
        }

  

 

RSA加密解密源码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Security.Cryptography;
using System.Security;

namespace MyRSA
{
    public class MyRSA
    {
        private static string publicKey =

            "<RSAKeyValue><Modulus>6CdsXgYOyya/yQH" +

            "TO96dB3gEurM2UQDDVGrZoe6RcAVTxAqDDf5L" +

            "wPycZwtNOx3Cfy44/D5Mj86koPew5soFIz9sx" +

            "PAHRF5hcqJoG+q+UfUYTHYCsMH2cnqGVtnQiE" +

            "/PMRMmY0RwEfMIo+TDpq3QyO03MaEsDGf13sP" +

            "w9YRXiac=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";

        private static string privateKey =

            "<RSAKeyValue><Modulus>6CdsXgYOyya/yQH" +

            "TO96dB3gEurM2UQDDVGrZoe6RcAVTxAqDDf5L" +

            "wPycZwtNOx3Cfy44/D5Mj86koPew5soFIz9sx" +

            "PAHRF5hcqJoG+q+UfUYTHYCsMH2cnqGVtnQiE" +

            "/PMRMmY0RwEfMIo+TDpq3QyO03MaEsDGf13sP" +

            "w9YRXiac=</Modulus><Exponent>AQAB</Exponent>" +

            "<P>/aoce2r6tonjzt1IQI6FM4ysR40j/gKvt4d" +

            "L411pUop1Zg61KvCm990M4uN6K8R/DUvAQdrRd" +

            "VgzvvAxXD7ESw==</P><Q>6kqclrEunX/fmOle" +

            "VTxG4oEpXY4IJumXkLpylNR3vhlXf6ZF9obEpG" +

            "lq0N7sX2HBxa7T2a0WznOAb0si8FuelQ==</Q>" +

            "<DP>3XEvxB40GD5v/Rr4BENmzQW1MBFqpki6FU" +

            "GrYiUd2My+iAW26nGDkUYMBdYHxUWYlIbYo6Te" +

            "zc3d/oW40YqJ2Q==</DP><DQ>LK0XmQCmY/ArY" +

            "gw2Kci5t51rluRrl4f5l+aFzO2K+9v3PGcndjA" +

            "StUtIzBWGO1X3zktdKGgCLlIGDrLkMbM21Q==</DQ><InverseQ>" +

            "GqC4Wwsk2fdvJ9dmgYlej8mTDBWg0Wm6aqb5kjn" +

            "cWK6WUa6CfD+XxfewIIq26+4Etm2A8IAtRdwPl4" +

            "aPjSfWdA==</InverseQ><D>a1qfsDMY8DSxB2D" +

            "Cr7LX5rZHaZaqDXdO3GC01z8dHjI4dDVwOS5ZFZ" +

            "s7MCN3yViPsoRLccnVWcLzOkSQF4lgKfTq3IH40" +

            "H5N4gg41as9GbD0g9FC3n5IT4VlVxn9ZdW+WQry" +

            "oHdbiIAiNpFKxL/DIEERur4sE1Jt9VdZsH24CJE=</D></RSAKeyValue>";



        static public string Decrypt(string base64code)
        {
            try
            {
                UnicodeEncoding ByteConverter = new UnicodeEncoding();
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                RSA.FromXmlString(privateKey);
                byte[] encryptedData;
                byte[] decryptedData;
                encryptedData = Convert.FromBase64String(base64code);
                decryptedData = RSADecrypt(encryptedData, RSA.ExportParameters(true), false);
                return ByteConverter.GetString(decryptedData);
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.Message);
                return "";
            }
        }



        static public string Encrypt(string toEncryptString)
        {
            try
            {
                UnicodeEncoding ByteConverter = new UnicodeEncoding();
                byte[] dataToEncrypt = ByteConverter.GetBytes(toEncryptString);
                byte[] encryptedData;
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                RSA.FromXmlString(privateKey);
                encryptedData = RSAEncrypt(dataToEncrypt, RSA.ExportParameters(false), false);
                string base64code = Convert.ToBase64String(encryptedData);
                return base64code;
            }
            catch (Exception exc)
            {
                Console.WriteLine(exc.Message);
                return "";
            }
        }

        static private byte[] RSAEncrypt(byte[] DataToEncrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding)
        {
            try
            {
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                RSA.ImportParameters(RSAKeyInfo);
                return RSA.Encrypt(DataToEncrypt, DoOAEPPadding);
            }
            catch (CryptographicException e)
            {
                Console.WriteLine(e.Message);
                return null;
            }
        }

        static private byte[] RSADecrypt(byte[] DataToDecrypt, RSAParameters RSAKeyInfo, bool DoOAEPPadding)
        {

            try
            {
                RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
                RSA.ImportParameters(RSAKeyInfo);
                return RSA.Decrypt(DataToDecrypt, DoOAEPPadding);
            }
            catch (CryptographicException e)
            {
                Console.WriteLine(e.Message);
                return null;
            }
        }
    }
}

  

转载自:http://www.cnblogs.com/amylis_chen/p/3641638.html

C#实现RSA加密和解密详解

标签:

原文地址:http://www.cnblogs.com/guohu/p/5562840.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!