| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495 | using System;using System.Collections.Generic;using System.Linq;using System.Security.Cryptography;using System.Text;namespace Aitex.Core.RT.Key{    public class RsaCryption    {        #region RSA 加密解密        #region RSA 的密钥产生        /// <summary>        /// RSA产生密钥        /// </summary>        /// <param name="xmlKeys">私钥</param>        /// <param name="xmlPublicKey">公钥</param>        public void RSAKey(out string xmlKeys, out string xmlPublicKey)        {            try            {                System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();                xmlKeys = rsa.ToXmlString(true);                xmlPublicKey = rsa.ToXmlString(false);            }            catch (Exception ex)            {                throw ex;            }        }        #endregion        #region RSA加密函数        //##############################################################################         //RSA 方式加密         //KEY必须是XML的形式,返回的是字符串         //该加密方式有长度限制的!        //##############################################################################         /// <summary>        /// RSA的加密函数        /// </summary>        /// <param name="xmlPublicKey">公钥</param>        /// <param name="encryptString">待加密的字符串</param>        /// <returns></returns>        public string RSAEncrypt(string xmlPublicKey, string encryptString)        {            try            {                byte[] PlainTextBArray;                byte[] CypherTextBArray;                string Result;                System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();                rsa.FromXmlString(xmlPublicKey);                PlainTextBArray = (new UnicodeEncoding()).GetBytes(encryptString);                CypherTextBArray = rsa.Encrypt(PlainTextBArray, false);                Result = Convert.ToBase64String(CypherTextBArray);                return Result;            }            catch (Exception ex)            {                throw ex;            }        }        /// <summary>        /// RSA的加密函数         /// </summary>        /// <param name="xmlPublicKey">公钥</param>        /// <param name="EncryptString">待加密的字节数组</param>        /// <returns></returns>        public string RSAEncrypt(string xmlPublicKey, byte[] EncryptString)        {            try            {                byte[] CypherTextBArray;                string Result;                System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();                rsa.FromXmlString(xmlPublicKey);                CypherTextBArray = rsa.Encrypt(EncryptString, false);                Result = Convert.ToBase64String(CypherTextBArray);                return Result;            }            catch (Exception ex)            {                throw ex;            }        }        #endregion        #region RSA的解密函数        /// <summary>        /// RSA的解密函数        /// </summary>        /// <param name="xmlPrivateKey">私钥</param>        /// <param name="decryptString">待解密的字符串</param>        /// <returns></returns>        public string RSADecrypt(string xmlPrivateKey, string decryptString)        {            try            {                byte[] PlainTextBArray;                byte[] DypherTextBArray;                string Result;                System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();                rsa.FromXmlString(xmlPrivateKey);                PlainTextBArray = Convert.FromBase64String(decryptString);                DypherTextBArray = rsa.Decrypt(PlainTextBArray, false);                Result = (new UnicodeEncoding()).GetString(DypherTextBArray);                return Result;            }            catch (Exception ex)            {                throw ex;            }        }        /// <summary>        /// RSA的解密函数         /// </summary>        /// <param name="xmlPrivateKey">私钥</param>        /// <param name="DecryptString">待解密的字节数组</param>        /// <returns></returns>        public string RSADecrypt(string xmlPrivateKey, byte[] DecryptString)        {            try            {                byte[] DypherTextBArray;                string Result;                System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();                rsa.FromXmlString(xmlPrivateKey);                DypherTextBArray = rsa.Decrypt(DecryptString, false);                Result = (new UnicodeEncoding()).GetString(DypherTextBArray);                return Result;            }            catch (Exception ex)            {                throw ex;            }        }        #endregion        #endregion        #region RSA数字签名        #region 获取Hash描述表        /// <summary>        /// 获取Hash描述表        /// </summary>        /// <param name="strSource">待签名的字符串</param>        /// <param name="HashData">Hash描述</param>        /// <returns></returns>        public bool GetHash(string strSource, ref byte[] HashData)        {            try            {                byte[] Buffer;                System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");                Buffer = System.Text.Encoding.GetEncoding("GB2312").GetBytes(strSource);                HashData = MD5.ComputeHash(Buffer);                return true;            }            catch (Exception ex)            {                throw ex;            }        }        /// <summary>        /// 获取Hash描述表        /// </summary>        /// <param name="strSource">待签名的字符串</param>        /// <param name="strHashData">Hash描述</param>        /// <returns></returns>        public bool GetHash(string strSource, ref string strHashData)        {            try            {                //从字符串中取得Hash描述                 byte[] Buffer;                byte[] HashData;                System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");                Buffer = System.Text.Encoding.GetEncoding("GB2312").GetBytes(strSource);                HashData = MD5.ComputeHash(Buffer);                strHashData = Convert.ToBase64String(HashData);                return true;            }            catch (Exception ex)            {                throw ex;            }        }        /// <summary>        /// 获取Hash描述表        /// </summary>        /// <param name="objFile">待签名的文件</param>        /// <param name="HashData">Hash描述</param>        /// <returns></returns>        public bool GetHash(System.IO.FileStream objFile, ref byte[] HashData)        {            try            {                //从文件中取得Hash描述                 System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");                HashData = MD5.ComputeHash(objFile);                objFile.Close();                return true;            }            catch (Exception ex)            {                throw ex;            }        }        /// <summary>        /// 获取Hash描述表        /// </summary>        /// <param name="objFile">待签名的文件</param>        /// <param name="strHashData">Hash描述</param>        /// <returns></returns>        public bool GetHash(System.IO.FileStream objFile, ref string strHashData)        {            try            {                //从文件中取得Hash描述                 byte[] HashData;                System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");                HashData = MD5.ComputeHash(objFile);                objFile.Close();                strHashData = Convert.ToBase64String(HashData);                return true;            }            catch (Exception ex)            {                throw ex;            }        }        #endregion        #region RSA签名        /// <summary>        /// RSA签名        /// </summary>        /// <param name="strKeyPrivate">私钥</param>        /// <param name="HashbyteSignature">待签名Hash描述</param>        /// <param name="EncryptedSignatureData">签名后的结果</param>        /// <returns></returns>        public bool SignatureFormatter(string strKeyPrivate, byte[] HashbyteSignature, ref byte[] EncryptedSignatureData)        {            try            {                System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();                RSA.FromXmlString(strKeyPrivate);                System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);                //设置签名的算法为MD5                 RSAFormatter.SetHashAlgorithm("MD5");                //执行签名                 EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);                return true;            }            catch (Exception ex)            {                throw ex;            }        }        /// <summary>        /// RSA签名        /// </summary>        /// <param name="strKeyPrivate">私钥</param>        /// <param name="HashbyteSignature">待签名Hash描述</param>        /// <param name="m_strEncryptedSignatureData">签名后的结果</param>        /// <returns></returns>        public bool SignatureFormatter(string strKeyPrivate, byte[] HashbyteSignature, ref string strEncryptedSignatureData)        {            try            {                byte[] EncryptedSignatureData;                System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();                RSA.FromXmlString(strKeyPrivate);                System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);                //设置签名的算法为MD5                 RSAFormatter.SetHashAlgorithm("MD5");                //执行签名                 EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);                strEncryptedSignatureData = Convert.ToBase64String(EncryptedSignatureData);                return true;            }            catch (Exception ex)            {                throw ex;            }        }        /// <summary>        /// RSA签名        /// </summary>        /// <param name="strKeyPrivate">私钥</param>        /// <param name="strHashbyteSignature">待签名Hash描述</param>        /// <param name="EncryptedSignatureData">签名后的结果</param>        /// <returns></returns>        public bool SignatureFormatter(string strKeyPrivate, string strHashbyteSignature, ref byte[] EncryptedSignatureData)        {            try            {                byte[] HashbyteSignature;                HashbyteSignature = Convert.FromBase64String(strHashbyteSignature);                System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();                RSA.FromXmlString(strKeyPrivate);                System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);                //设置签名的算法为MD5                 RSAFormatter.SetHashAlgorithm("MD5");                //执行签名                 EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);                return true;            }            catch (Exception ex)            {                throw ex;            }        }        /// <summary>        /// RSA签名        /// </summary>        /// <param name="strKeyPrivate">私钥</param>        /// <param name="strHashbyteSignature">待签名Hash描述</param>        /// <param name="strEncryptedSignatureData">签名后的结果</param>        /// <returns></returns>        public bool SignatureFormatter(string strKeyPrivate, string strHashbyteSignature, ref string strEncryptedSignatureData)        {            try            {                byte[] HashbyteSignature;                byte[] EncryptedSignatureData;                HashbyteSignature = Convert.FromBase64String(strHashbyteSignature);                System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();                RSA.FromXmlString(strKeyPrivate);                System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);                //设置签名的算法为MD5                 RSAFormatter.SetHashAlgorithm("MD5");                //执行签名                 EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);                strEncryptedSignatureData = Convert.ToBase64String(EncryptedSignatureData);                return true;            }            catch (Exception ex)            {                throw ex;            }        }        #endregion        #region RSA 签名验证        /// <summary>        /// RSA签名验证        /// </summary>        /// <param name="strKeyPublic">公钥</param>        /// <param name="HashbyteDeformatter">Hash描述</param>        /// <param name="DeformatterData">签名后的结果</param>        /// <returns></returns>        public bool SignatureDeformatter(string strKeyPublic, byte[] HashbyteDeformatter, byte[] DeformatterData)        {            try            {                System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();                RSA.FromXmlString(strKeyPublic);                System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA);                //指定解密的时候HASH算法为MD5                 RSADeformatter.SetHashAlgorithm("MD5");                if (RSADeformatter.VerifySignature(HashbyteDeformatter, DeformatterData))                {                    return true;                }                else                {                    return false;                }            }            catch (Exception ex)            {                throw ex;            }        }        /// <summary>        /// RSA签名验证        /// </summary>        /// <param name="strKeyPublic">公钥</param>        /// <param name="strHashbyteDeformatter">Hash描述</param>        /// <param name="DeformatterData">签名后的结果</param>        /// <returns></returns>        public bool SignatureDeformatter(string strKeyPublic, string strHashbyteDeformatter, byte[] DeformatterData)        {            try            {                byte[] HashbyteDeformatter;                HashbyteDeformatter = Convert.FromBase64String(strHashbyteDeformatter);                System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();                RSA.FromXmlString(strKeyPublic);                System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA);                //指定解密的时候HASH算法为MD5                 RSADeformatter.SetHashAlgorithm("MD5");                if (RSADeformatter.VerifySignature(HashbyteDeformatter, DeformatterData))                {                    return true;                }                else                {                    return false;                }            }            catch (Exception ex)            {                throw ex;            }        }        /// <summary>        /// RSA签名验证        /// </summary>        /// <param name="strKeyPublic">公钥</param>        /// <param name="HashbyteDeformatter">Hash描述</param>        /// <param name="strDeformatterData">签名后的结果</param>        /// <returns></returns>        public bool SignatureDeformatter(string strKeyPublic, byte[] HashbyteDeformatter, string strDeformatterData)        {            try            {                byte[] DeformatterData;                System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();                RSA.FromXmlString(strKeyPublic);                System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA);                //指定解密的时候HASH算法为MD5                 RSADeformatter.SetHashAlgorithm("MD5");                DeformatterData = Convert.FromBase64String(strDeformatterData);                if (RSADeformatter.VerifySignature(HashbyteDeformatter, DeformatterData))                {                    return true;                }                else                {                    return false;                }            }            catch (Exception ex)            {                throw ex;            }        }        /// <summary>        /// RSA签名验证        /// </summary>        /// <param name="strKeyPublic">公钥</param>        /// <param name="strHashbyteDeformatter">Hash描述</param>        /// <param name="strDeformatterData">签名后的结果</param>        /// <returns></returns>        public bool SignatureDeformatter(string strKeyPublic, string strHashbyteDeformatter, string strDeformatterData)        {            try            {                byte[] DeformatterData;                byte[] HashbyteDeformatter;                HashbyteDeformatter = Convert.FromBase64String(strHashbyteDeformatter);                System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();                RSA.FromXmlString(strKeyPublic);                System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA);                //指定解密的时候HASH算法为MD5                 RSADeformatter.SetHashAlgorithm("MD5");                DeformatterData = Convert.FromBase64String(strDeformatterData);                if (RSADeformatter.VerifySignature(HashbyteDeformatter, DeformatterData))                {                    return true;                }                else                {                    return false;                }            }            catch (Exception ex)            {                throw ex;            }        }        #endregion        #endregion    }}
 |