个人理解c#对称加密 非对称加密 散列算法的应用场景
c#类库默认实现了一系列加密算法在System.Security.Cryptography; 命名空间下
对称加密
通过同一密匙进行加密和解密。往往应用在内部数据传输情况下。比如公司a程序 和B程序 。a程序要给B程序发送数据 但是为了防止明文发送 数据被窃取。那么我就定了一个协议传输的数据的byte字节都统一+1 而接收数据的情况下将Byte字节统一-1 然后就能获得正确的 数据(当然这个是一个简单的加密) ,真正应用的加密肯定比这个复杂很多
非对称加密
传输数据的双方有各自的公钥和私钥 公钥对外公开 私钥自己保留,当像B用户发送数据 使用B用户的公钥进行加密 加密的数据只有B用户的私钥可以解密 那么如果在传输过程中 如果消息被截取 那么也破解不了
比如支付操作 a用户输入银行卡 卡号和密码 进行支付 那么在传输过程中 如果别抓包截取数据。是很危险的 。那么统一在客户端将参数信息 通过服务器提供的公钥进行加密。如果在传输过程中被截取
我们都知道https请求在传输过程中数据是安全的
https请求客户端需要安装证书 证书就类似公钥和私钥 客户端发起请求获得服务器的公钥 并将自己的公钥发送给服务器。 在传输过程中都使用双方的公钥进行加密传输 保证了数据的安全性
https请求与普通请求的区别是 https是长连接 同时增加了 双方公钥交换的握手
列子
using System.Collections.Generic; using System.IO; using System.Linq; using System.Text; using System.Threading.Tasks; using System.Security.Cryptography; namespace SecureTranferTest { class Program { /// <summary> /// 安妮的私匙 /// </summary> public static System.Security.Cryptography.CngKey anlikey = null; //安妮的公钥 public static byte[] anlipulicKey = null; //鲍勃的私匙 public static System.Security.Cryptography.CngKey bobkey = null; public static byte[] bobpulicKey = null; static void Main(string[] args) { CreateKey(); AnliSendMessage("今天天气很好");//安妮开始向bob发送消息 AnliSendMessage("啦啦啦");//安妮开始向bob发送消息 Console.ReadKey(); } public static void CreateKey() { //以ECDsaP256创建私钥 anlikey = CngKey.Create(CngAlgorithm.ECDiffieHellmanP256); //根据私钥生成公钥 anlipulicKey = anlikey.Export(CngKeyBlobFormat.EccPublicBlob); //以ECDsaP256创建私钥 bobkey = CngKey.Create(CngAlgorithm.ECDiffieHellmanP256); //根据公钥获得私钥 bobpulicKey = bobkey.Export(CngKeyBlobFormat.EccPublicBlob); } public static void AnliSendMessage(string message) { byte[] rowData = Encoding.UTF8.GetBytes(message); //将发送消息转换成二进制格式 //同annli的私匙生成一个新的随机的密钥对 using (ECDiffieHellmanCng cng = new ECDiffieHellmanCng(anlikey)) { //通过bob的公钥byte[]获得一个cngKey密钥对象 using (CngKey bobkey = CngKey.Import(bobpulicKey, CngKeyBlobFormat.EccPublicBlob)) { //通过anli的密钥对与bob的公钥生成一个对称密钥 var sumKey = cng.DeriveKeyMaterial(bobkey); //创建一个对称加密和解密的(AEC)高级算法实现 using (var aes = new AesCryptoServiceProvider()) { aes.Key = sumKey; //设置对称加密密钥 aes.GenerateIV(); //生成对称加sh密对象 using (ICryptoTransform encryptor = aes.CreateEncryptor()) { using (MemoryStream ms = new MemoryStream()) { //定义一个加密转换流 var cs = new CryptoStream(ms, encryptor, CryptoStreamMode.Write); //写入加密初始化向量(IV) ms.Write(aes.IV, , aes.IV.Length); //写如传递数据 cs.Write(rowData,, rowData.Length); cs.Close();//使用完后必须关闭 否则会丢失数据 var data= ms.ToArray(); //安妮向鲍勃发送加密数据消息 加密数据的二进制数据() Console.WriteLine("安妮向鲍勃发送加密数据消息 加密数据的二进制数据"); BobReceivesData(data); } aes.Clear(); } } } } } //Bob接收信息 public static void BobReceivesData(byte[] data) { Console.WriteLine("鲍勃接收到 并开始解密"); byte[] rowData = null; //首先读取未加密的初始化向量(IV) 在data里面 //1.通过对称加密高级算法实现AesCryptoServiceProvider 获得IV的长度 using (var aes = new AesCryptoServiceProvider()) { ;//他的操作块二进制长度转换成byte存储的十进制长度 byte[] ivdata = new byte[ivlength]; Array.Copy(data, ivdata, ivlength); //同bob的私匙生成一个新的随机的密钥对 using (ECDiffieHellmanCng cng = new ECDiffieHellmanCng(bobkey)) { //通过anni的公钥byte[]获得一个cngKey密钥对象 using (CngKey anikey = CngKey.Import(anlipulicKey, CngKeyBlobFormat.EccPublicBlob)) { //通过anli的密钥对与bob的公钥生成一个对称密钥 var sumKey = cng.DeriveKeyMaterial(anikey); aes.Key = sumKey; //设置对称加密密钥 aes.IV = ivdata; using (ICryptoTransform decryptor = aes.CreateDecryptor()) using (MemoryStream me = new MemoryStream()) { //定义一个加密转换流 var cs = new CryptoStream(me, decryptor, CryptoStreamMode.Write); cs.Write(data, ivlength, data.Length - ivlength);//将加密信息进行解密 cs.Close();//一定要关闭 否则将丢失最后一位数据 rowData = me.ToArray(); Console.WriteLine("解密成功 信息为:"); Console.WriteLine(Encoding.UTF8.GetString(rowData)); } } } } } } }
散列算法
同样的字符串 通过散列算法 算出唯一的散列值。 比如md5加密
应用场景 接口防止参数被篡改 参数用md5加密将md5散列算出的字符串提交到服务器 如果服务器也通过散列参数的字符串跟提交的一样 那么代表没有呗篡改
个人理解c#对称加密 非对称加密 散列算法的应用场景的更多相关文章
- 【Java-加密算法】对称加密、非对称加密、单向散列(转)
一提到加密,就会联想到数字签名,这两个经常被混淆的概念到底是什么呢? 加密:加密是一种以密码方式发送信息的方法.只有拥有正确密钥的人才能解开这个信息的密码.对于其他人来说,这个信息看起来就像是一系列随 ...
- HTTPS加密那点事-对称、非对称加密、数字证书
转自:[漫画]https 加密那点事 首先,HTTP协议的缺点:没有对数据进行加密,都是明文传输的.如果要改进这种明文传输的协议,该如何做呢? 对称加密: 在每次发送真实数据之前,服务器先生成一把密钥 ...
- [svc]对称加密/非对称加密细枝末节-如何做到数据传输的authentication/data integrity/confidentiality(私密)
对称/非对称/混合加密的冷知识 数据在互联网上传输,要考虑安全性. 讲到安全,要从三方面考虑: 1.authentication 每一个IP包的认证,确保合法源的数据 2.data integrity ...
- 第十四章 调试及安全性(In .net4.5) 之 对称及非对称加密
1. 概述 本章内容包括:对称及非对称加密算法..net中的加密类.使用哈希操作.创建和管理签名认证.代码访问权限 和 加密字符串. 2. 主要内容 2.1 使用对称和非对称加密 ① 对称加密:使用同 ...
- Java进阶(八)Java加密技术之对称加密 非对称加密 不可逆加密算法
对称加密 非对称加密 不可逆加密算法 根据密钥类型不同可以将现代密码技术分为两类:对称加密算法(私钥密码体系)和非对称加密算法(公钥密码体系). 1 对称加密算法 原理 对称加密算法中,数据加密和解密 ...
- C#.NET中对称和非对称加密、解密方法汇总--亲测可用
C#.NET中对称和非对称加密.解密方法汇总--亲测可用 在安全性要求比较高的系统中都会涉及到数据的加密.解密..NET为我们封装了常用的加密算法,例如:MD5,DES,RSA等.有可逆加密,也有 ...
- DotNet加密方式解析--散列加密
没时间扯淡类,赶紧上车吧. 在现代社会中,信息安全对于每一个人都是至关重要的,例如我们的银行账户安全.支付宝和微信账户安全.以及邮箱等等,说到信息安全,那就必须得提到加密技术,至于加密的一些相关概念, ...
- .NET加密方式解析--散列加密
在现代社会中,信息安全对于每一个人都是至关重要的,例如我们的银行账户安全.支付宝和微信账户安全.以及邮箱等等,说到信息安全,那就必须得提到加密技术,至于加密的一些相关概念,在这里就不说了. 这一次将会 ...
- PKI和加密,散列算法
Day 11-PKI和加密,散列算法 PKI(Public Key Infrastructure公钥基础设施) 1 PKI(Public Key Infrastructure公钥基础设施)回顾学习 - ...
随机推荐
- 《连载 | 物联网框架ServerSuperIO教程》- 13.自定义视图显示接口开发,满足不同的显示需求
1.C#跨平台物联网通讯框架ServerSuperIO(SSIO)介绍 <连载 | 物联网框架ServerSuperIO教程>1.4种通讯模式机制. <连载 | 物联网框架Serve ...
- JS+CSS3人物奔跑动画
查看效果:http://hovertree.com/texiao/jquery/58/ 效果图: 代码: <!DOCTYPE html> <html> <head> ...
- HTML5本地存储Localstorage
什么是localstorage 前几天在老项目中发现有对cookie的操作觉得很奇怪,咨询下来是要缓存一些信息,以避免在URL上面传递参数,但没有考虑过cookie会带来什么问题: ① cookie大 ...
- android 自定义控件——(一)圆角按钮
----------------------------------矩形或圆角类型(源代码下有属性解释)------------------------------------------------ ...
- mac终端命令
目录操作 命令名 功能描述 使用举例 mkdir 创建一个目录 mkdir dirname rmdir 删除一个目录 rmdir dirname mvdir 移动或重命名一个目录 mvdir dir1 ...
- win7 64位下vs不能以管理员身份运行的问题解决
开发机上安装了VS6.0/2008/2010/2013,之前一直是正常的,突然莫名其妙不能以管理员身份运行(除了VS6),报"application cannot start.", ...
- 【转】JavaScript常用代码书写规范
javascript 代码规范 代码规范我们应该遵循古老的原则:“能做并不意味着应该做”. 全局命名空间污染 总是将代码包裹在一个立即的函数表达式里面,形成一个独立的模块. 不推荐 1 2 3 var ...
- Freemarker 程序开发
Freemarker 程序开发 现在web开发中,多使用freemarker 来描述页面.通常会使用的macro来定义各种组件,从而达到UI组件的复用.结合使用其它的指定,可快速的描述一个html页面 ...
- Oracle发送邮件,支持HTML,多收件人,多附件
Oracle发邮件,权限问题 - 创建 ACL BEGIN DBMS_NETWORK_ACL_ADMIN.CREATE_ACL(acl => 'email_server_permissions. ...
- Rocksdb引擎记录格式
Rocksdb是一个kv引擎,由facebook团队基于levelDB改进而来,Rocksdb采用LSM-tree存储数据,良好的读写特性以及压缩特性使得其非常受欢迎.此外,Rocksdb引擎作为插件 ...