加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

C#自定义RSA加密解密及RSA签名和验证封装类

发布时间:2020-12-15 17:57:49 所属栏目:百科 来源:网络整理
导读:今天PHP站长网 52php.cn把收集自互联网的代码分享给大家,仅供参考。 using System;using System.Text;using System.Security.Cryptography;namespace DotNet.Utilities{ /// summary /// RSA加密解密及RSA签名和验证 ///

以下代码由PHP站长网 52php.cn收集自互联网

现在PHP站长网小编把它分享给大家,仅供参考

using System;
using System.Text;
using System.Security.Cryptography;
namespace DotNet.Utilities
{
    /// <summary>
    /// RSA加密解密及RSA签名和验证
    /// </summary>
    public class RSACryption
    {      
        public 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)
        {          
                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,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,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,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,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
 
    }
} 

以上内容由PHP站长网【52php.cn】收集整理供大家参考研究

如果以上内容对您有帮助,欢迎收藏、点赞、推荐、分享。

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读