非对称加密RSA的C#实现
1.对称加密算法
对称加密是最快速、最简单的一种加密方式,加密(encryption)与解密(decryption)用的是同样的密钥(secret key)。
对称加密有很多种算法,由于它效率很高,所以被广泛使用在很多加密协议的核心当中。对称加密通常使用的是相对较小的密钥,
一般小于256 bit。因为密钥越大,加密越强,但加密与解密的过程越慢。如果你只用1 bit来做这个密钥,那黑客们可以先试着用0来解密,
不行的话就再用1解;但如果你的密钥有1 MB大,黑客们可能永远也无法破解,但加密和解密的过程要花费很长的时间。
密钥的大小既要照顾到安全性,也要照顾到效率,是一个trade-off。
常用对称加密:DES、3DES、AES等
(代码后续添加)
2.非对称加密算法
非对称加密为数据的加密与解密提供了一个非常安全的方法,它使用了一对密钥,公钥(public key)和私钥(private key)。
私钥只能由一方安全保管,不能外泄,而公钥则可以发给任何请求它的人。非对称加密使用这对密钥中的一个进行加密,而解密则需要另一个密钥。
比如,你向银行请求公钥,银行将公钥发给你,你使用公钥对消息加密,那么只有私钥的持有人--银行才能对你的消息解密。
与对称加密不同的是,银行不需要将私钥通过网络发送出去,因此安全性大大提高。
常用非对称加密:DSA、RSA等
目前C#中提供的RSA非对称加密(其他语言如JAVA是可以逆向加解密的,但没有测试过),只能使用公钥进行加密,只能使用私钥进行解密,不能逆向使用(私钥无法加密,公钥无法解密),
因为这样的安全性更高,不会出现私钥加密后的数据,所有公钥持有者都可以解密的问题,如果一定要有这种需求出现,则可以使用
第三方的加解密组件BouncyCastle来实现
//引入命名空间
using System;
using System.IO;
using System.Text;
using System.Security.Cryptography; //RSA测试实例
string oldData = "taiyonghai";
CreateRSAKey();
string ciphertext = RSAEncrypt(oldData);
string newData = RSADecrypt(ciphertext); /// <summary>
/// 创建RSA公钥私钥
/// </summary>
public void CreateRSAKey()
{
//设置[公钥私钥]文件路径
string privateKeyPath = @"d:\\PrivateKey.xml";
string publicKeyPath = @"d:\\PublicKey.xml";
//创建RSA对象
RSACryptoServiceProvider rsa = new RSACryptoServiceProvider();
//生成RSA[公钥私钥]
string privateKey = rsa.ToXmlString(true);
string publicKey = rsa.ToXmlString(false);
//将密钥写入指定路径
File.WriteAllText(privateKeyPath, privateKey);//文件内包含公钥和私钥
File.WriteAllText(publicKeyPath, publicKey);//文件内只包含公钥
}
/// <summary>
/// 使用RSA实现加密
/// </summary>
/// <param name="data">加密数据</param>
/// <returns></returns>
public string RSAEncrypt(string data)
{
//C#默认只能使用[公钥]进行加密(想使用[公钥解密]可使用第三方组件BouncyCastle来实现)
string publicKeyPath = @"d:\\PublicKey.xml";
string publicKey = File.ReadAllText(publicKeyPath);
//创建RSA对象并载入[公钥]
RSACryptoServiceProvider rsaPublic = new RSACryptoServiceProvider();
rsaPublic.FromXmlString(publicKey);
//对数据进行加密
byte[] publicValue = rsaPublic.Encrypt(Encoding.UTF8.GetBytes(data), false);
string publicStr = Convert.ToBase64String(publicValue);//使用Base64将byte转换为string
return publicStr;
}
/// <summary>
/// 使用RSA实现解密
/// </summary>
/// <param name="data">解密数据</param>
/// <returns></returns>
public string RSADecrypt(string data)
{
//C#默认只能使用[私钥]进行解密(想使用[私钥加密]可使用第三方组件BouncyCastle来实现)
string privateKeyPath = @"d:\\PrivateKey.xml";
string privateKey = File.ReadAllText(privateKeyPath);
//创建RSA对象并载入[私钥]
RSACryptoServiceProvider rsaPrivate = new RSACryptoServiceProvider();
rsaPrivate.FromXmlString(privateKey);
//对数据进行解密
byte[] privateValue = rsaPrivate.Decrypt(Convert.FromBase64String(data), false);//使用Base64将string转换为byte
string privateStr = Encoding.UTF8.GetString(privateValue);
return privateStr;
}
附录:
在线加解密站点:http://web.chacuo.net/netrsakeypair
非对称加密RSA的C#实现的更多相关文章
- Crypto++应用:非对称加密RSA
1,非对称加密RSA: (1)乙方生成两把密钥(公钥和私钥).公钥是公开的,任何人都可以获得,私钥则是保密的. (2)甲方获取乙方的公钥,然后用它对信息加密. (3)乙方得到加密后的信息,用私钥解密. ...
- 非对称加密RSA的应用及在C#中的实现
quote: http://www.cnblogs.com/happinessCodes/archive/2010/07/27/1786404.html 一说到数据的加密,常常会涉及到这几个单词: ...
- 非对称加密RSA、Elgamal、背包算法、Rabin、D-H、ECC(椭圆曲线加密算法)等。使用最广泛的是RSA算法
非对称加密算法需要两个密钥:公开密钥(publickey)和私有密钥(privatekey).公开密钥与私有密钥是一对,如果用公开密钥对数据进行加密,只有用对应的私有密钥才能解密:如果用私 ...
- Asp.Net 常用工具类之加密——非对称加密RSA算法
踏入程序员这个行业也有几年了,几年中有收获(技术加强),有付出(时间和亚健康状态).当然喏,并不后悔,代码路还长!!! On The Way,永不止步!!! 开发过程中也积累了一些自己的经验.代码块和 ...
- 加密算法之非对称加密RSA
一:非对称加密的由来 RSA公钥加密算法是1977年由Ron Rivest.Adi Shamirh和LenAdleman在(美国麻省理工学院)开发的.RSA取名来自开发他们三者的名字.RSA是目前最有 ...
- python 加密 解密 签名 验证签名 公钥 私钥 非对称加密 RSA
加密与解密,这很重要,我们已经可以用pypcap+npcap简单嗅探到网络中的数据包了.而这个工具其实可以嗅探到更多的数据.如果我们和别人之间传输的数据被别人嗅探到,那么信息泄漏,信息被篡改,将给我们 ...
- PHP非对称加密-RSA
对称加密算法是在加密和解密时使用同一个密钥.与对称加密算法不同,非对称加密算法需要两个密钥--公开密钥(public key)和私有密钥(private key)进行加密和解密.公钥和密钥是一对,如果 ...
- openssl 非对称加密 RSA 加密解密以及签名验证签名
1. 简介 openssl rsa.h 提供了密码学中公钥加密体系的一些接口, 本文主要讨论利用rsa.h接口开发以下功能 公钥私钥的生成 公钥加密,私钥解密 私钥加密,公钥解密 签名:私钥签名 验 ...
- javascript版前端页面RSA非对称加密解密
最近由于项目需要做一个url传参,并在页面显示参数内容的需求,这样就会遇到一个url地址可能会被假冒, 并传递非法内容显示在页面的尴尬情况 比如xxx.shtml?server=xxx是坏人& ...
随机推荐
- 认识大明星——轻量级容器docker知识树点亮
docker是一个轻量级容器,属于操作系统层面的虚拟化技术,封装了文件系统(AUFS)以及网络互联,进程隔离等特性. 传统虚拟化架构: docker虚拟化架构: 可以看出,docker是没有Guest ...
- MySQL索引选择及规则整理
索引选择性就是结果个数与总个数的比值. 用sql语句表示为: SELECT COUNT(*) FROM table_name WHERE column_name/SELECT COUNT(*) FRO ...
- 建立maven工程pom.xml报错:web.xml is missing and <failOnMissingWebXml> is set to true
解决方式:如图添加web.xml文件即可
- spring报错NoClassDefFoundError等与第三方jar包导入问题
今天配置spring,遇到各种报错的问题,做一个小小总结. 1.刚开始我忘了引入commons-logging,报错.--解决方式:下载并引入该jar包 2.spring以及commons-loggi ...
- Qt--自定义Model
众所周知,Qt提供了一套Model/View框架供开发者使用,Model用来提供数据, View则用来提供视觉层的显示.实际上这是一套遵循MVC设计模式的GUI框架,因为Qt还提供了默认的Delega ...
- 通过createObjectURL实现图片预览
实现原理:通过createObjectURL 创建一个临时指向某地址的二进制对象. 过程:点击触发隐藏的 input file 的点击事件,使用createObjectURL读取 file,创建 ...
- ASP.NET 控制器
1.继承Controller public class TestController : Controller2.编写控制器方法 // URL : test/Edit/1 [ ...
- CAS单点登陆 SSO
什么是单点登陆 SO是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统.它包括可以将这次主要的登录映射到其他应用中用于同一个用户的登录的机制.它是目前比较流行的企业业务整合的解决方 ...
- 201521123106 《Java程序设计》第5周学习总结
1. 本章学习总结 2. 书面作业 Q1. 代码阅读:Child压缩包内源代码 1.1 com.parent包中Child.java文件能否编译通过?哪句会出现错误?试改正该错误.并分析输出结果. 答 ...
- 201521123029《Java程序设计》第十一周学习总结
1. 本周学习总结 1.1 以你喜欢的方式(思维导图或其他)归纳总结多线程相关内容. 2. 书面作业 1.互斥访问与同步访问 完成题集4-4(互斥访问)与4-5(同步访问) 1.1 除了使用synch ...