【加密】RSA加密之实现
private void btn_RSA_Click(object sender, EventArgs e)
{
//第一种方法调用
this.textBox1.Text = RSAEncrypt("", "key");//密文
this.textBox2.Text = RSADecrypt("", this.textBox1.Text); //第二种方法调用
//this.textBox1.Text = RSAEncrypt2("key", "MyKey");
//this.textBox2.Text = RSADecrypt2(this.textBox1.Text, "MyKey"); //第三种方法调用
//string publickey = "";
//string privatekey = "";
//this.textBox1.Text = RSA_Encrypt("key", out publickey, out privatekey);
//this.textBox2.Text = RSA_Decrypt(this.textBox1.Text, privatekey);
}
/// <summary>
/// RSA加密
/// </summary>
/// <param name="publickey"></param>
/// <param name="content"></param>
/// <returns></returns>
public static string RSAEncrypt(string publickey, string content)
{
publickey = @"<RSAKeyValue><Modulus>5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=</Modulus><Exponent>AQAB</Exponent></RSAKeyValue>";
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(publickey);
byte[] cipherbytes = rsa.Encrypt(Encoding.UTF8.GetBytes(content), false);
return Convert.ToBase64String(cipherbytes);
}
/// <summary>
/// RSA解密
/// </summary>
/// <param name="privatekey"></param>
/// <param name="content"></param>
/// <returns></returns>
public static string RSADecrypt(string privatekey, string content)
{
privatekey = @"<RSAKeyValue><Modulus>5m9m14XH3oqLJ8bNGw9e4rGpXpcktv9MSkHSVFVMjHbfv+SJ5v0ubqQxa5YjLN4vc49z7SVju8s0X4gZ6AzZTn06jzWOgyPRV54Q4I0DCYadWW4Ze3e+BOtwgVU1Og3qHKn8vygoj40J6U85Z/PTJu3hN1m75Zr195ju7g9v4Hk=</Modulus><Exponent>AQAB</Exponent><P>/hf2dnK7rNfl3lbqghWcpFdu778hUpIEBixCDL5WiBtpkZdpSw90aERmHJYaW2RGvGRi6zSftLh00KHsPcNUMw==</P><Q>6Cn/jOLrPapDTEp1Fkq+uz++1Do0eeX7HYqi9rY29CqShzCeI7LEYOoSwYuAJ3xA/DuCdQENPSoJ9KFbO4Wsow==</Q><DP>ga1rHIJro8e/yhxjrKYo/nqc5ICQGhrpMNlPkD9n3CjZVPOISkWF7FzUHEzDANeJfkZhcZa21z24aG3rKo5Qnw==</DP><DQ>MNGsCB8rYlMsRZ2ek2pyQwO7h/sZT8y5ilO9wu08Dwnot/7UMiOEQfDWstY3w5XQQHnvC9WFyCfP4h4QBissyw==</DQ><InverseQ>EG02S7SADhH1EVT9DD0Z62Y0uY7gIYvxX/uq+IzKSCwB8M2G7Qv9xgZQaQlLpCaeKbux3Y59hHM+KpamGL19Kg==</InverseQ><D>vmaYHEbPAgOJvaEXQl+t8DQKFT1fudEysTy31LTyXjGu6XiltXXHUuZaa2IPyHgBz0Nd7znwsW/S44iql0Fen1kzKioEL3svANui63O3o5xdDeExVM6zOf1wUUh/oldovPweChyoAdMtUzgvCbJk1sYDJf++Nr0FeNW1RB1XG30=</D></RSAKeyValue>";
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
rsa.FromXmlString(privatekey);
byte[] cipherbytes = rsa.Decrypt(Convert.FromBase64String(content), false);
return Encoding.UTF8.GetString(cipherbytes);
}
方法1(实现加密长文字)
/// <summary>
/// 加密
/// </summary>
/// <param name="s"></param>
/// <param name="key"></param>
/// <returns></returns>
public string RSAEncrypt2(string s, string key)
{
if (string.IsNullOrEmpty(s)) throw new ArgumentException("An empty string value cannot be encrypted.");
if (string.IsNullOrEmpty(key)) throw new ArgumentException("Cannot encrypt using an empty key. Please supply an encryption key.");
CspParameters cspp = new CspParameters();
cspp.KeyContainerName = key;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspp);
rsa.PersistKeyInCsp = true;
byte[] bytes = rsa.Encrypt(System.Text.UTF8Encoding.UTF8.GetBytes(s), true);
return BitConverter.ToString(bytes);
}
/// <summary>
/// 解密
/// </summary>
/// <param name="s"></param>
/// <param name="key"></param>
/// <returns></returns>
public string RSADecrypt2(string s, string key)
{
if (string.IsNullOrEmpty(s)) throw new ArgumentException("An empty string value cannot be encrypted.");
if (string.IsNullOrEmpty(key)) throw new ArgumentException("Cannot decrypt using an empty key. Please supply a decryption key.");
CspParameters cspp = new CspParameters();
cspp.KeyContainerName = key;
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(cspp);
rsa.PersistKeyInCsp = true;
string[] decryptArray = s.Split(new string[] { "-" }, StringSplitOptions.None);
byte[] decryptByteArray = Array.ConvertAll<string, byte>(decryptArray, (a => Convert.ToByte(byte.Parse(a, System.Globalization.NumberStyles.HexNumber))));
byte[] bytes = rsa.Decrypt(decryptByteArray, true);
return System.Text.UTF8Encoding.UTF8.GetString(bytes);
}
方法2(使用容器名称检索该容器中保存的密钥)
UnicodeEncoding ByteConverter = new UnicodeEncoding();
//RSA加密,随机生成公私钥对并作为输出参返回
public string RSA_Encrypt(string content,out string publickey,out string privatekey)
{
publickey = "";
privatekey = ""; try
{
//方法1
//RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
//publickey = Convert.ToBase64String(RSA.ExportCspBlob(false));
//privatekey = Convert.ToBase64String(RSA.ExportCspBlob(true)); //方法2
//RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
//publickey = RSA.ToXmlString(false);
//privatekey = RSA.ToXmlString(true); //方法3
CspParameters cspp = new CspParameters();
cspp.KeyContainerName = "mykey";
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(cspp); byte[] bytes_Cypher_Text = RSA.Encrypt(ByteConverter.GetBytes(content),false);
return Convert.ToBase64String(bytes_Cypher_Text);
}
catch (CryptographicException e)
{
Console.WriteLine(e.Message);
return null;
}
} //RSA解密
public string RSA_Decrypt(string str_Cypher_Text, string privatekey)
{
try
{
//方法1
//RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
//byte[] bytes_Public_Key = Convert.FromBase64String(privatekey);
//RSA.ImportCspBlob(bytes_Public_Key); //方法2
//RSACryptoServiceProvider RSA = new RSACryptoServiceProvider();
//RSA.FromXmlString(privatekey); //方法3
CspParameters cspp = new CspParameters();
cspp.KeyContainerName = "mykey";
RSACryptoServiceProvider RSA = new RSACryptoServiceProvider(cspp); byte[] bytes_Content = RSA.Decrypt(Convert.FromBase64String(str_Cypher_Text), false);
return ByteConverter.GetString(bytes_Content);
}
catch (CryptographicException e)
{
Console.WriteLine(e.ToString());
return null;
}
}
方法3(实现加密短文字)
【加密】RSA加密之实现的更多相关文章
- openssl 非对称加密 RSA 加密解密以及签名验证签名
1. 简介 openssl rsa.h 提供了密码学中公钥加密体系的一些接口, 本文主要讨论利用rsa.h接口开发以下功能 公钥私钥的生成 公钥加密,私钥解密 私钥加密,公钥解密 签名:私钥签名 验 ...
- openssl C语言编码实现rsa加密
非原创, 引用自: 1 CC=gcc CPPFLAGS= -I /home/yyx//openssl-1.0.1t/include/ CFLAGS=-Wall -g LIBPATH = -L /usr ...
- 最通俗易懂的RSA加密解密指导
前言 RSA加密算法是一种非对称加密算法,简单来说,就是加密时使用一个钥匙,解密时使用另一个钥匙. 因为加密的钥匙是公开的,所又称公钥,解密的钥匙是不公开的,所以称为私钥. 密钥 关于RSA加密有很多 ...
- MD5,Des,RSA加密解密
一.加密和解密 下面先熟悉几个概念 1>对称加密:加密的key和解密的key是同一个 但是如何确保密钥安全地进行传递?秘钥的安全是一个问题 2>非对称加密:加密点的key和解密的key不是 ...
- “不给力啊,老湿!”:RSA加密与破解
作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 加密和解密是自古就有技术了.经常看到侦探电影的桥段,勇敢又机智的主角,拿着一长串毫 ...
- .NET 对接JAVA 使用Modulus,Exponent RSA 加密
最近有一个工作是需要把数据用RSA发送给Java 虽然一开始标准公钥 net和Java RSA填充的一些算法不一样 但是后来这个坑也补的差不多了 具体可以参考 http://www.cnblogs. ...
- Android数据加密之Rsa加密
前言: 最近无意中和同事交流数据安全传输的问题,想起自己曾经使用过的Rsa非对称加密算法,闲下来总结一下. 其他几种加密方式: Android数据加密之Rsa加密 Android数据加密之Aes加密 ...
- 兼容javascript和C#的RSA加密解密算法,对web提交的数据进行加密传输
Web应用中往往涉及到敏感的数据,由于HTTP协议以明文的形式与服务器进行交互,因此可以通过截获请求的数据包进行分析来盗取有用的信息.虽然https可以对传输的数据进行加密,但是必须要申请证书(一般都 ...
- RSA加密例子和中途遇到的问题
在进行RSA加密例子 package test; import java.io.IOException; import java.security.Key; import java.security. ...
- iOS中RSA加密详解
先贴出代码的地址,做个说明,因为RSA加密在iOS的代码比较少,网上开源的也很少,最多的才8个星星.使用过程中发现有错误.然后我做了修正,和另一个库进行了整合,然后将其支持CocoaPod. http ...
随机推荐
- 实例源码--Android智能家居系统源码
下载源码 技术要点: 1.Android应 用开发基础框架 2.SQLITE数据库的 使用 3.网络通信 4.GOOGLE地图模块 5.源码带有非常详 细的中文注释 ...... 详细介绍: ...
- com.velocity.servlet
package com.velocity.servlet; import java.io.IOException; import java.util.ArrayList; import java.ut ...
- Adding iAds to Cocos2d-x on iOS
http://www.mwebb.me.uk/2013/08/adding-iads-to-cocos2d-x-on-ios.html Looking at the forums it seems a ...
- ie6下子元素撑大父元素
今天遇到了一个问题.在给a元素定义hover并且增大尺寸时,IE6下该元素会把父元素撑大,而非IE浏览器则是表现为溢出效果不会撑大父元素(我想要的效果).解决IE6的这个问题是采用了一个定位+负边距的 ...
- Asp.Net 之 未能加载文件或程序集 system.web.extensions 解决方法
最近做项目发现未能加载文件或程序集的错误,这是由于我的机器上没有安装Ajax的原因.问题解决后,整理如下:表现:1."System.Web.Extensions, Version=1.0.61025. ...
- 【转】Adobe CC 的下载地址
http://trials3.adobe.com/AdobeProducts/AEFT/12/win64/AfterEffects_12_LS20.7z http://trials3.adobe.co ...
- JFinal极速开发实战-业务功能开发-通用表单验证器
提交表单数据时,需要经过前端的验证才能提交到后台,而后台的验证器再做一道数据的校验,成功之后才能进入action进行业务数据的处理. 在表单数据的验证中,数据类型的验证还是比较固定的.首先是对录入数据 ...
- div居中的三种方法
方法1: #div1{ width:200px; height:200px; background:green; position:absolute; left:0; top:0; right:0; ...
- 关于XML的Schema文件讲解
1 Schema概述 1.1 什么是Schema l Schema是新的XML文档约束:DTD出现的比较早. l Schema要比DTD强大很多: l Schema本身也是XML文档,但Sche ...
- RGBa颜色 css3的Alpha通道支持
CSS3中,RGBa 为颜色声明添加Alpha通道. RGB值被指定使用3个8位无符号整数(0 – 255)并分别代表红色.蓝色.和绿色.增加的一个alpha通道并不是一个颜色通道——它只是用来指定除 ...