苏飞论坛

标题: RSACryption--RSA加密/解密字符串 [打印本页]

作者: 站长苏飞    时间: 2012-12-10 22:56
标题: RSACryption--RSA加密/解密字符串
                   RSACryption--RSA加密/解密字符串
导读部分
-------------------------------------------------------------------------------------------------------------
C#基类库苏飞版--系列教程导航 http://www.sufeinet.com/thread-655-1-1.html

下载之前你首先要注册成为会员哦,注册之后就可以直接下载啦
更新时间:2012-12-10
最新的RSACryption类下载:
(, 下载次数: 468)
这个类是关于加密,解密的操作,文件的一些高级操作
1.RSACryption RSA 的密钥产生
2.RSACryption RSA的加密函数
3.RSACryption RSA的解密函数
4.RSACryption 获取Hash描述表
5.RSACryption RSA签名
6.RSACryption RSA签名认证
看下面代码吧
[C#] 纯文本查看 复制代码
/// <summary>
/// 类说明:Assistant
/// 编 码 人:苏飞
/// 联系方式:361983679  
/// 更新网站:http://www.sufeinet.com/thread-655-1-1.html
/// </summary>
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描述表
    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

  }
}


作者: inghot    时间: 2013-5-23 14:44
不错,正好需要用到这个。
作者: milk_ye    时间: 2014-9-26 13:33
强烈支持楼主ing……
作者: ching126    时间: 2014-9-26 14:04
我只是路过打酱油的。
作者: west_dragon    时间: 2015-12-10 16:37
楼主加油,我们都看好你哦。
作者: www248750521    时间: 2016-6-9 21:29
网站上给定了公钥,怎么把这个公钥转成xml格式
[JavaScript] 纯文本查看 复制代码
var publicKey = "MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQCCw93f4CsVKbmfNNISrIMC5W9LK6o7dd/St3ehLBT0Ukct/1GvEgXRQMUM1Pjvj++/JzVE68dVzNV4GopdBRCmz3FQAib0fBYkmoHGghKKuJhTNwrqKMXXwi0gnEd1CuspQUK7YaNQHfae72dvuTBgnyA3H7mUdOajctCJGO9OawIDAQAB";
var txtpayapssword = $.trim($("#payPassword").val());
var encrypt = new JSEncrypt();
encrypt.setPublicKey(publicKey);
$("#payPassword").val(encrypt.encrypt(txtpayapssword));

作者: 站长苏飞    时间: 2016-6-11 18:29
www248750521 发表于 2016-6-9 21:29
网站上给定了公钥,怎么把这个公钥转成xml格式
[mw_shl_code=javascript,true]var publicKey = "MIGfMA0GC ...

这个自己写个读Xml格式的程序完成
作者: gharbor    时间: 2019-12-12 11:40
这个很不错,收下了!!!!!!!!!!
作者: fy5399    时间: 2020-2-5 14:46
谢谢
作者: 一线Jon    时间: 2020-2-12 21:54
我只是路过打酱油的。




欢迎光临 苏飞论坛 (http://www.sufeinet.com/) Powered by Discuz! X3.4