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

本文实例讲述了C#自定义RSA加密解密及RSA签名和验证类。分享给大家供大家参考。具体分析如下:

这个C#类自定义RSA加密解密及RSA签名和验证,包含了RSA加密、解密及签名所需的相关函数,带有详细的注释说明。

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, 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
 }
}

希望本文所述对大家的C#程序设计有所帮助。

时间: 2015-03-23

C#加密算法汇总(推荐)

方法一: 复制代码 代码如下: //须添加对System.Web的引用 using System.Web.Security; ... /// <summary> /// SHA1加密字符串 /// </summary> /// <param name="source">源字符串</param> /// <returns>加密后的字符串</returns> public string SHA1(string sour

C# DES加密算法中向量的作用详细解析

DES一共就有4个参数参与运作:明文.密文.密钥.向量.为了初学者容易理解,可以把4个参数的关系写成:密文=明文+密钥+向量:明文=密文-密钥-向量.为什么要向量这个参数呢?因为如果有一篇文章,有几个词重复,那么这个词加上密钥形成的密文,仍然会重复,这给破解者有机可乘,破解者可以根据重复的内容,猜出是什么词,然而一旦猜对这个词,那么,他就能算出密钥,整篇文章就被破解了!加上向量这个参数以后,每块文字段都会依次加上一段值,这样,即使相同的文字,加密出来的密文,也是不一样的,算法的安全性大大提高!

c# rsa注册实现加密文字

复制代码 代码如下: RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(); private void btencoding_Click(object sender, EventArgs e){    if (mbox.Text == "")    {        MessageBox.Show("加密文字信息不能为空!");        return;    }    if (publick

同时兼容JS和C#的RSA加密解密算法详解(对web提交的数据加密传输)

前言 我们在Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都是收费的),成本较高.那么问题来了,如果对web提交的敏感数据进行加密呢?web应用中,前端的数据处理和交互基本上都是靠javascript来完成,后台的逻辑处理可以C#(java)等进行处理. 微软的C#中虽然有RSA算法,但是格式和OpenSSL生成的公钥/私钥文件格式并不兼容.这个

jQuery+C#实现参数RSA加密传输功能【附jsencrypt.js下载】

本文实例讲述了jQuery+C#实现参数RSA加密传输功能.分享给大家供大家参考,具体如下: 注意: 参数传递的+号处理,在传输时会把+变成空格,不处理后端就报错了. 1.前端代码 <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Login</title> <

c# 实现MD5,SHA1,SHA256,SHA512等常用加密算法源代码

复制代码 代码如下: using System; using System.IO; using System.Data; using System.Text; using System.Diagnostics; using System.Security; using System.Security.Cryptography; /**//* * .Net框架由于拥有CLR提供的丰富库支持,只需很少的代码即可实现先前使用C等旧式语言很难实现的加密算法.本类实现一些常用机密算法,供参考.其中MD5算

C#的3DES加密解密算法实例代码

C#类如下: 复制代码 代码如下: using System;using System.Collections.Generic;using System.Text;using System.Security.Cryptography;using System.IO; namespace ConsoleApplication1{    /// <summary>    /// 加解密类    /// </summary>    public class EncryptHelper  

基于私钥加密公钥解密的RSA算法C#实现方法

本文实例讲述了基于私钥加密公钥解密的RSA算法C#实现方法,是一种应用十分广泛的算法.分享给大家供大家参考之用.具体方法如下: 一.概述 RSA算法是第一个能同时用于加密和数字签名的算法,也易于理解和操作. RSA是被研究得最广泛的公钥算法,从提出到现在已近二十年,经历了各种攻击的考验,逐渐为人们接受,普遍认为是目前最优秀的公钥方案之一.RSA的安全性依赖于大数的因子分解,但并没有从理论上证明破译RSA的难度与大数分解难度等价. RSA的安全性依赖于大数分解.公钥和私钥都是两个大素数( 大于 1

C#实现简单的RSA非对称加密算法示例

本文实例讲述了C#实现简单的RSA非对称加密算法.分享给大家供大家参考,具体如下: 界面控件 namespace RSA算法 { partial class Form1 { /// <summary> /// 必需的设计器变量. /// </summary> private System.ComponentModel.IContainer components = null; /// <summary> /// 清理所有正在使用的资源. /// </summary

使用openssl实现rsa非对称加密算法示例

复制代码 代码如下: <?php/** * 使用openssl实现非对称加密 * @since 2010-07-08 */class Rsa{    /**     * private key     */        private $_privKey; /**         * public key         */        private $_pubKey; /**         * the keys saving path         */        privat

Python3非对称加密算法RSA实例详解

本文实例讲述了Python3非对称加密算法RSA.分享给大家供大家参考,具体如下: python3 可以使用 Crypto.PublicKey.RSA 和 rsa 生成公钥.私钥. 其中 python3.6 Crypto 库的安装方式请参考前面一篇<Python3对称加密算法AES.DES3> rsa 加解密的库使用 pip3 install rsa 就行了 C:\WINDOWS\system32>pip3 install rsa Collecting rsa   Downloading

JAVA加密算法- 非对称加密算法(DH,RSA)的详细介绍

非对称密码概念 1.与对称加密算法的主要差别在于,加密和解密的密钥不相同,一个公开(公钥),一个保密(私钥).主要解决了对称加密算法密钥分配管理的问题,提高了算法安全性. 2.非对称加密算法的加密.解密的效率比较低.在算法设计上,非对称加密算法对待加密的数据长度有着苛刻的要求.例如RSA算法要求待加密的数据不得大于53个字节. 3.非对称加密算法主要用于 交换对称加密算法的密钥,而非数据交换 4.java6提供实现了DH和RSA两种算法.Bouncy Castle提供了E1Gamal算法支持.除

ThinkPHP实现的rsa非对称加密类示例

本文实例讲述了ThinkPHP实现的rsa非对称加密类.分享给大家供大家参考,具体如下: 公钥加密后的字符串是一直变化的,但是用私钥解密后的内容仍然是相同的,这是为了加密数据使用的. 私钥加密的字符串是不会变化的,即使暴露在外网上别人截取时如果没有公钥也是看不出来内容的,仅允许给予公钥的第三方来解密并看到内容,实际作用相当于签名功能,如果能拿到未加密的内容,说明一定是信任方的数据,因为有他的签名啊. 其实这种非对称加密技术可以用于单点登录中去,安全级别高,能解密获取到内容应该就是信任方的数据.

Python实现的HMacMD5加密算法示例

本文实例讲述了Python实现的HMacMD5加密算法.分享给大家供大家参考,具体如下: 什么是 HMAC-MD5? 1.比如你和对方共享了一个密钥K,现在你要发消息给对方,既要保证消息没有被篡改,又要能证明信息确实是你本人发的,那么就把原信息和使用K计算的HMAC的值一起发过去.对方接到之后,使用自己手中的K把消息计算一下HMAC,如果和你发送的HMAC一致,那么可以认为这个消息既没有被篡改也没有冒充. 2.MD5就是通过散列对要输出的数据进行摘要,接收到数据时,再同样进行MD5散列,与给定的

PHP实现的AES 128位加密算法示例

本文实例讲述了PHP实现的AES 128位加密算法.分享给大家供大家参考,具体如下: /* 加密算法一般分为两种:对称加密算法和非对称加密算法. 对称加密 对称加密算法是消息发送者和接收者使用同一个密匙,发送者使用密匙加密了文件, 接收者使用同样的密匙解密,获取信息.常见的对称加密算法有:des/aes/3des. 对称加密算法的特点有:速度快,加密前后文件大小变化不大,但是密匙的保管是个大问题 ,因为消息发送方和接收方任意一方的密匙丢失,都会导致信息传输变得不安全. 非对称加密 与对称加密相对

python使用rsa非对称加密过程解析

这篇文章主要介绍了python使用rsa非对称加密过程解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下 1.安装rsa 支持python 2.7 或者 python 3.5 以上版本 使用豆瓣pypi源来安装rsa pip install -i https://pypi.douban.com/simple rsa 2.加密解密 2.1.生成公私钥对 import rsa # 1.接收者(A)生成512位公私钥对 # a. lemon_pub为

简单的手工hibernate程序示例

本文讲述了简单的手工hibernate程序示例.分享给大家供大家参考.具体如下: 今天学习了下hibernate,写了个小的手工程序,总结下, 首先创建数据库表: 复制代码 代码如下: create table increment_testr(id bigint not null, name char(10), primary key(id)); eclipse下,新建工程. 新建数据库表的映射,这里使用手工方式完成: IncrementTester.java public class Incr

java实现一个简单的网络爬虫代码示例

目前市面上流行的爬虫以python居多,简单了解之后,觉得简单的一些页面的爬虫,主要就是去解析目标页面(html).那么就在想,java有没有用户方便解析html页面呢?找到了一个jsoup包,一个非常方便解析html的工具呢. 使用方式也非常简单,引入jar包: <dependency> <groupId>org.jsoup</groupId> <artifactId>jsoup</artifactId> <version>1.8.