博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
RSA加密解密及RSA签名和验证
阅读量:4447 次
发布时间:2019-06-07

本文共 12354 字,大约阅读时间需要 41 分钟。

转:http://www.jb51.net/article/62858.htm

using System;using System.Text;using System.Security.Cryptography;namespace DotNet.Utilities{    ///      /// RSA加密解密及RSA签名和验证    ///      public class RSACryption    {        public RSACryption()        {        }        #region RSA 加密解密         #region RSA 的密钥产生         ///         /// RSA 的密钥产生 产生私钥 和公钥         ///         ///         ///         public void RSAKey(out string xmlKeys, out string xmlPublicKey)        {            System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();            xmlKeys = rsa.ToXmlString(true);            xmlPublicKey = rsa.ToXmlString(false);        }        #endregion        #region RSA的加密函数         //##############################################################################         //RSA 方式加密         //说明KEY必须是XML的行式,返回的是字符串         //在有一点需要说明!!该加密方式有 长度 限制的!!         //##############################################################################         //RSA的加密函数 string        public string RSAEncrypt(string xmlPublicKey, string m_strEncryptString)        {            byte[] PlainTextBArray;            byte[] CypherTextBArray;            string Result;            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();            rsa.FromXmlString(xmlPublicKey);            PlainTextBArray = (new UnicodeEncoding()).GetBytes(m_strEncryptString);            CypherTextBArray = rsa.Encrypt(PlainTextBArray, false);            Result = Convert.ToBase64String(CypherTextBArray);            return Result;        }        //RSA的加密函数 byte[]        public string RSAEncrypt(string xmlPublicKey, byte[] EncryptString)        {            byte[] CypherTextBArray;            string Result;            RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();            rsa.FromXmlString(xmlPublicKey);            CypherTextBArray = rsa.Encrypt(EncryptString, false);            Result = Convert.ToBase64String(CypherTextBArray);            return Result;        }        #endregion        #region RSA的解密函数         //RSA的解密函数 string        public string RSADecrypt(string xmlPrivateKey, string m_strDecryptString)        {            byte[] PlainTextBArray;            byte[] DypherTextBArray;            string Result;            System.Security.Cryptography.RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();            rsa.FromXmlString(xmlPrivateKey);            PlainTextBArray = Convert.FromBase64String(m_strDecryptString);            DypherTextBArray = rsa.Decrypt(PlainTextBArray, false);            Result = (new UnicodeEncoding()).GetString(DypherTextBArray);            return Result;        }        //RSA的解密函数 byte        public string RSADecrypt(string xmlPrivateKey, byte[] DecryptString)        {            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;        }        #endregion        #endregion        #region RSA数字签名         #region 获取Hash描述表         //获取Hash描述表 ,sharejs.com        public bool GetHash(string m_strSource, ref byte[] HashData)        {            //从字符串中取得Hash描述             byte[] Buffer;            System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");            Buffer = System.Text.Encoding.GetEncoding("GB2312").GetBytes(m_strSource);            HashData = MD5.ComputeHash(Buffer);            return true;        }        //获取Hash描述表         public bool GetHash(string m_strSource, ref string strHashData)        {            //从字符串中取得Hash描述             byte[] Buffer;            byte[] HashData;            System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");            Buffer = System.Text.Encoding.GetEncoding("GB2312").GetBytes(m_strSource);            HashData = MD5.ComputeHash(Buffer);            strHashData = Convert.ToBase64String(HashData);            return true;        }        //获取Hash描述表         public bool GetHash(System.IO.FileStream objFile, ref byte[] HashData)        {            //从文件中取得Hash描述             System.Security.Cryptography.HashAlgorithm MD5 = System.Security.Cryptography.HashAlgorithm.Create("MD5");            HashData = MD5.ComputeHash(objFile);            objFile.Close();            return true;        }        //获取Hash描述表         public bool GetHash(System.IO.FileStream objFile, ref string strHashData)        {            //从文件中取得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;        }        #endregion        #region RSA签名         //RSA签名         public bool SignatureFormatter(string p_strKeyPrivate, byte[] HashbyteSignature, ref byte[] EncryptedSignatureData)        {            System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();            RSA.FromXmlString(p_strKeyPrivate);            System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);            //设置签名的算法为MD5             RSAFormatter.SetHashAlgorithm("MD5");            //执行签名             EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);            return true;        }        //RSA签名         public bool SignatureFormatter(string p_strKeyPrivate, byte[] HashbyteSignature, ref string m_strEncryptedSignatureData)        {            byte[] EncryptedSignatureData;            System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();            RSA.FromXmlString(p_strKeyPrivate);            System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);            //设置签名的算法为MD5             RSAFormatter.SetHashAlgorithm("MD5");            //执行签名             EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);            m_strEncryptedSignatureData = Convert.ToBase64String(EncryptedSignatureData);            return true;        }        //RSA签名         public bool SignatureFormatter(string p_strKeyPrivate, string m_strHashbyteSignature, ref byte[] EncryptedSignatureData)        {            byte[] HashbyteSignature;            HashbyteSignature = Convert.FromBase64String(m_strHashbyteSignature);            System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();            RSA.FromXmlString(p_strKeyPrivate);            System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);            //设置签名的算法为MD5             RSAFormatter.SetHashAlgorithm("MD5");            //执行签名             EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);            return true;        }        //RSA签名         public bool SignatureFormatter(string p_strKeyPrivate, string m_strHashbyteSignature, ref string m_strEncryptedSignatureData)        {            byte[] HashbyteSignature;            byte[] EncryptedSignatureData;            HashbyteSignature = Convert.FromBase64String(m_strHashbyteSignature);            System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();            RSA.FromXmlString(p_strKeyPrivate);            System.Security.Cryptography.RSAPKCS1SignatureFormatter RSAFormatter = new System.Security.Cryptography.RSAPKCS1SignatureFormatter(RSA);            //设置签名的算法为MD5             RSAFormatter.SetHashAlgorithm("MD5");            //执行签名             EncryptedSignatureData = RSAFormatter.CreateSignature(HashbyteSignature);            m_strEncryptedSignatureData = Convert.ToBase64String(EncryptedSignatureData);            return true;        }        #endregion        #region RSA 签名验证         public bool SignatureDeformatter(string p_strKeyPublic, byte[] HashbyteDeformatter, byte[] DeformatterData)        {            System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();            RSA.FromXmlString(p_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;            }        }        public bool SignatureDeformatter(string p_strKeyPublic, string p_strHashbyteDeformatter, byte[] DeformatterData)        {            byte[] HashbyteDeformatter;            HashbyteDeformatter = Convert.FromBase64String(p_strHashbyteDeformatter);            System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();            RSA.FromXmlString(p_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;            }        }        public bool SignatureDeformatter(string p_strKeyPublic, byte[] HashbyteDeformatter, string p_strDeformatterData)        {            byte[] DeformatterData;            System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();            RSA.FromXmlString(p_strKeyPublic);            System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA);            //指定解密的时候HASH算法为MD5             RSADeformatter.SetHashAlgorithm("MD5");            DeformatterData = Convert.FromBase64String(p_strDeformatterData);            if (RSADeformatter.VerifySignature(HashbyteDeformatter, DeformatterData))            {                return true;            }            else            {                return false;            }        }        public bool SignatureDeformatter(string p_strKeyPublic, string p_strHashbyteDeformatter, string p_strDeformatterData)        {            byte[] DeformatterData;            byte[] HashbyteDeformatter;            HashbyteDeformatter = Convert.FromBase64String(p_strHashbyteDeformatter);            System.Security.Cryptography.RSACryptoServiceProvider RSA = new System.Security.Cryptography.RSACryptoServiceProvider();            RSA.FromXmlString(p_strKeyPublic);            System.Security.Cryptography.RSAPKCS1SignatureDeformatter RSADeformatter = new System.Security.Cryptography.RSAPKCS1SignatureDeformatter(RSA);            //指定解密的时候HASH算法为MD5             RSADeformatter.SetHashAlgorithm("MD5");            DeformatterData = Convert.FromBase64String(p_strDeformatterData);            if (RSADeformatter.VerifySignature(HashbyteDeformatter, DeformatterData))            {                return true;            }            else            {                return false;            }        }        #endregion        #endregion    }}

 例子:

string privateKey = "";            string publicKey = "";            RSACryption rsa = new RSACryption();            rsa.RSAKey(out privateKey, out publicKey);            string context = "加密内容XXXXXX";            string encryptstr = rsa.RSAEncrypt(publicKey, context);     //内容加密            string decryptstr = rsa.RSADecrypt(privateKey, encryptstr);     //内容解密

 

转载于:https://www.cnblogs.com/OleRookie/p/5882331.html

你可能感兴趣的文章
css样式优先级
查看>>
遇见未知的自己
查看>>
js中return;、return true、return false;区别
查看>>
关于list的一些作业
查看>>
bzoj 2818: Gcd
查看>>
bzoj千题计划316:bzoj3173: [Tjoi2013]最长上升子序列(二分+树状数组)
查看>>
JDK1.8之后匿名内部类访问方法中的局部变量不用加final修饰
查看>>
九度oj题目1521:二叉树的镜像
查看>>
java运行时内存分类
查看>>
为什么说 Git 比 SVN 更好
查看>>
图的应用:哈密尔顿路径
查看>>
js计算日期相减天数
查看>>
jquery 判断元素是否隐藏
查看>>
wcf契约版本处理与异常处理(随记)
查看>>
1.基础数据类型的初识 字符串 bool 整型 if else elif
查看>>
Mybatis源码分析: MapperMethod功能讲解(1)
查看>>
Error: Cannot retrieve repository metadata (repomd.xml) for repository: addons.
查看>>
jqGrid的subGrid子表格
查看>>
插件库
查看>>
桶排序
查看>>