C#中RSA加密与解密的实例详解

1.  RSA加密与解密  --  使用公钥加密、私钥解密

public class RSATool
 {
  public string Encrypt(string strText, string strPublicKey)
  {
   RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
   rsa.FromXmlString(strPublicKey);
   byte[] byteText = Encoding.UTF8.GetBytes(strText);
   byte[] byteEntry = rsa.Encrypt(byteText, false);
   return Convert.ToBase64String(byteEntry);
  }
  public string Decrypt(string strEntryText,string strPrivateKey)
  {
   RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
   rsa.FromXmlString(strPrivateKey);
   byte[] byteEntry = Convert.FromBase64String(strEntryText);
   byte[] byteText = rsa.Decrypt(byteEntry, false);
   return Encoding.UTF8.GetString(byteText);
  }
  public Dictionary<string,string> GetKey()
  {
   Dictionary<string, string> dictKey = new Dictionary<string, string>();
   RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
   dictKey.Add("PublicKey", rsa.ToXmlString(false));
   dictKey.Add("PrivateKey", rsa.ToXmlString(true));
   return dictKey;
  }
 }

测试:

RSATool myRSA = new RSATool();
   Dictionary<string, string> dictK = new Dictionary<string, string>();
   dictK = myRSA.GetKey();
   string strText = "123456";
   Console.WriteLine("要加密的字符串是:{0}", strText);
   string str1 = myRSA.Encrypt("123456", dictK["PublicKey"]);
   Console.WriteLine("加密后的字符串:{0}", str1);
   string str2 = myRSA.Decrypt(str1, dictK["PrivateKey"]);
   Console.WriteLine("解密后的字符串:{0}", str2);

2.  RSA加密与解密  --  使用同一个密钥容器进行加密与解密

 public class RSAToolX
 {
  public string Encrypt(string strText)
  {
   CspParameters CSApars = new CspParameters();
   CSApars.KeyContainerName = "Test001";
   RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(CSApars);
   byte[] byteText = Encoding.UTF8.GetBytes(strText);
   byte[] byteEntry = rsa.Encrypt(byteText, false);
   return Convert.ToBase64String(byteEntry);
  }
  public string Decrypt(string strEntryText)
  {
   CspParameters CSApars = new CspParameters();
   CSApars.KeyContainerName = "Test001";
   RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(CSApars);
   byte[] byteEntry = Convert.FromBase64String(strEntryText);
   byte[] byteText = rsa.Decrypt(byteEntry, false);
   return Encoding.UTF8.GetString(byteText);
  }
 }

测试 :

RSAToolX myRSA = new RSAToolX();
   string strText = "123456";
   Console.WriteLine("要加密的字符串是:{0}", strText);
   string str1 = myRSA.Encrypt("123456");
   Console.WriteLine("加密后的字符串:{0}", str1);
   string str2 = myRSA.Decrypt(str1);
   Console.WriteLine("解密后的字符串:{0}", str2);

总结

以上所述是小编给大家介绍的C#中RSA加密与解密的实例详解,希望对大家有所帮助,如果大家有任何疑问欢迎给我留言,小编会及时回复大家的!

时间: 2019-08-21

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

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

C#RSA对接JAVA中RSA方式代码实例

C#中通过FromXmlString属性加载的是XML形式,而JAVA中用到的是解析后的PEM格式的字符串,总之读取证书中信息无非是转换方式问题 /// <summary> /// c# 使用 java 的公钥进行rsa加密 utf8编码 通过解析公钥加密数据 /// </summary> /// <param name="publickey"></param> /// <returns></returns> pu

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

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

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

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

C#使用RSA加密解密文件

本文实例为大家分享了C#使用RSA加密解密文件的具体代码,供大家参考,具体内容如下 加密代码: //加密代码,注意会覆盖原文件,里面有我的公钥,你要用时记得覆盖我的公钥 private bool encryptFile(string filename) { FileStream f; try { f = new FileStream(filename, FileMode.Open, FileAccess.ReadWrite, FileShare.Read); } catch { return f

Java RSA加密解密实现方法分析【附BASE64 jar包下载】

本文实例讲述了Java RSA加密解密实现方法.分享给大家供大家参考,具体如下: 该工具类中用到了BASE64,需要借助第三方类库:javabase64-1.3.1.jar javabase64-1.3.1.jar 本站下载地址. 注意: RSA加密明文最大长度117字节,解密要求密文最大长度为128字节,所以在加密和解密的过程中需要分块进行. RSA加密对明文的长度是有限制的,如果加密数据过大会抛出如下异常: Exception in thread "main" javax.cryp

python rsa 加密解密

最近有需求,需要研究一下RSA加密解密安全:在网上百度了一下例子文章,很少有文章介绍怎么保存.传输.打印加密后的文本信息,都是千篇一律的.直接在一个脚本,加密后的文本信息赋于变量,然后立马调用解密.仔细想了一下RSA加密解密的过程,确定有二端,一端为:加密端,一端为解密端,一般不在同一台机器.在这里,我只模拟了保存在文件,然后再读出来:关于怎以通过网络传输,也是大同小异. 用RSA加密后的密文,是无法直接用文本显示,因为存在一些无法用文本信息编码显示的二进制数据.对于保存,网络传输,打印不乱码,

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签名和验证 /// </

Java实现的RSA加密解密算法示例

本文实例讲述了Java实现的RSA加密解密算法.分享给大家供大家参考,具体如下: import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.image.BufferedImage; import java.

PHP的RSA加密解密方法以及开发接口使用

网络安全问题很重要,尤其是保证数据安全,遇到很多在写接口的程序员直接都是明文数据传输,在我看来这是很不专业的.本人提倡经过接口的数据都要进行加密解密之后进行使用. 这篇文章主要介绍使用PHP开发接口,数据实现RSA加密解密后使用,实例分析了PHP自定义RSA类实现加密与解密的技巧,非常具有实用价值,需要的朋友可以参考下. 简单介绍RSA RSA加密算法是最常用的非对称加密算法,CFCA在证书服务中离不了它.但是有不少新手对它不太了解.下面仅作简要介绍.RSA是第一个比较完善的公开密钥算法,它既能

Python3.7 基于 pycryptodome 的AES加密解密、RSA加密解密、加签验签

Python3.7 基于 pycryptodome 的AES加密解密.RSA加密解密.加签验签,具体代码如下所示: #!/usr/bin/env python # -*- coding: utf8 -*- import os import rsa import json import hashlib import base64 from Crypto.Cipher import AES from ..settings_manager import settings class RSAEncryp

php的RSA加密解密算法原理与用法分析

本文实例讲述了php的RSA加密解密算法原理与用法.分享给大家供大家参考,具体如下: 最近因为工作的需要,要倒腾支付宝支付相关的知识,因为支付宝应用了RSA加密机制,个人对此并不了解,所以在这里写下一篇总结. 1.生成公钥和私钥 要应用RSA算法,必须先生成公钥和私钥,公钥和私钥的生成可以借助openssl工具. 本次测验是在windows下进行的,可以到以下的地址下载windows安装包:http://gnuwin32.sourceforge.net/packages/openssl.htm,

python实现RSA加密(解密)算法

RSA是目前最有影响力的公钥加密算法,它能够抵抗到目前为止已知的绝大多数密码攻击,已被ISO推荐为公钥数据加密标准. 今天只有短的RSA钥匙才可能被强力方式解破.到2008年为止,世界上还没有任何可靠的攻击RSA算法的方式.只要其密钥的长度足够长,用RSA加密的信息实际上是不能被解破的.但在分布式计算和量子计算机理论日趋成熟的今天,RSA加密安全性受到了挑战. RSA算法基于一个十分简单的数论事实:将两个大素数相乘十分容易,但是想要对其乘积进行因式分解却极其困难,因此可以将乘积公开作为加密密钥.