打开APP
userphoto
未登录

开通VIP,畅享免费电子书等14项超值服

开通VIP
RSA加密解密及RSA签名和验证
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 }
本站仅提供存储服务,所有内容均由用户发布,如发现有害或侵权内容,请点击举报
打开APP,阅读全文并永久保存 查看更多类似文章
猜你喜欢
类似文章
【热】打开小程序,算一算2024你的财运
C# 通过java生成的RSA公钥加密和解密
RSA加解密工具类
C#开发中常用的加密解密方法汇总
C#中RSA加密解密和签名与验证的实现
使用X.509数字证书加密解密实务(三)-- 使用RSA证书结合对称加密技术加密长数据
C# 加解密之RSA
更多类似文章 >>
生活服务
热点新闻
分享 收藏 导长图 关注 下载文章
绑定账号成功
后续可登录账号畅享VIP特权!
如果VIP功能使用有故障,
可点击这里联系客服!

联系客服