32.NET中加密解密基本概念
对消息的接收方来说,安全的交流方式需要同时满足3个条件:
1、完整性:消息在传输途中没有被篡改过,即消息是完好无损的。
2、保密性:接收放可以理解或解密来自发送方的信息。(不保证第三方无法获得,但保证第三方无法解密)
3、可认证性:确定消息确实是由预期的发送方发送。
散列运算
散列运算也叫哈希运算,对消息进行散列运算可以获得消息的摘要(Digest),也叫哈希值或指纹。MD5(Message-Digest Algorithm 5)就是一种散列运算。
散列运算特点:
● 不可逆
● 只要消息有哪怕是细微的差别,得到的摘要都不同。可以用来判断是否被篡改。(满足安全交流条件1)
● 得到的摘要长度固定,比如64位或128位

散列运算验证过程:
→发送方对消息进行散列运算,得到原始摘要
→接收放对消息进行相同的散列运算,得到本地摘要
→对比原始摘要和本地摘要
存在问题是,原始摘要有可能被篡改。
密匙散列算法验证过程:
→发送放要发送信息"hello",不直接对"hello"进行散列运算,而是对"[darren]hello"进行散列运算,并得到原始摘要。[darren]相当于密匙。
→将信息"hello"和"[darren]hello"的摘要发送给接收方。
→第三方有可能截获"[darren]hello"的摘要和信息"hello",可能修改消息为"hello world"并得到新的篡改摘要发送给接收方。
→接收方为消息加上密匙"[darren]hello world",进行散列运算得到最终摘要,发现与篡改摘要不一致,说明消息已经被篡改了。
对称加密 Symmetric encryption
例如DES(Data Encryption Standard)、AES(Advanced Encryption Standard)。与散列算法的不同之处在于:加密是双向的,密文的大小和原消息的大小相当,不像散列算法那样是固定的64位或128位。
对称加密过程:
→发送方使用密匙对消息加密后发送信息。
→接收方使用相同的密匙对消息进行解密。
第三方依然有可能截取消息,但得到的是一堆乱码。
对称加密的问题:
满足了保密性,但没有满足完整性和可认证性。第三方一旦拿到了密匙,就可以进行篡改。
非对称加密
非对称加密包含公匙/私匙对。加密规则是:公匙加密信息,私匙解密信息;私匙加密信息,公匙解密信息。
□ 加密模式
→发送方使用公匙对发送消息"hello"加密
→接收方使用私匙对消息解密获取到"hello"
但该模式也仅仅满足了保密性,没有能满足完整性和可认证性,因为公匙是公开的,任何人都可以使用这个公匙来加密信息并发送给接收方,而接收方也无法得知消息是由哪个发送方发送。 
□ 认证模式
→发送方使用匙对发送消息"hello"加密。
→接收方使用公匙对消息解密获取到"hello"
由于只有发送方才有公匙,满足可认证性,但如果第三方也获得了公匙,也可以对消息进行解密,所以就不满足消息的保密性。

数字签名
→发送方对信息"hello"散列运算,得到原始摘要。
→发送方使用私匙对原始摘要进行加密,也叫签名,将消息"hello"和加密过的原始摘要发送
→接收方使用发送方的公匙对消息摘要解密得到解密后摘要,如果与原始摘要相同,就确认消息来自预期发送方。(满足可认证性和保密性)
→接收方对收到的消息"hello"使用与发送方相同的散列算法获得摘要,如果该摘要与解密后摘要相同,确认消息没有经过篡改。(满足完整性)

证书机制
证书机制可以看作是一个第三方机构,发送方把自身信息和公匙交给这个第三方,第三方将这些信息打包正证书Certificate,当需要公匙时,只需要获得证书,从中提取出公匙就可以了。
参考资料:
※ 《.NET之美》--张子阳,感谢写了这么好的书!
32.NET中加密解密基本概念的更多相关文章
- java中加密解密工具类
在工作中经常遇到需要加密.解密的场景.例如用户的手机号等信息,在保存到数据库的过程中,需要对数据进行加密.取出时进行解密. public class DEStool { private String ...
- .Net中的加密解密
返回博客列表 转 .Net中的加密解密 李朝强 发布时间: 2015/11/23 12:55 阅读: 33 收藏: 3 点赞: 0 评论: 0 在一些比较重要的应用场景中,通过网络传递数据需要进行加密 ...
- .net中加密与解密
.Net中的加密解密 引言 在一些比较重要的应用场景中,通过网络传递数据需要进行加密以保证安全.本文将简单地介绍了加密解密的一些概念,以及相关的数字签名.证书,最后介绍了如何在.NET中对数据进行对称 ...
- Aes加密/解密示例项目
#AesEncrypt:Aes加密/解密示例项目 <br> 附件中的“AesEncrypt.zip”是本项目的exe文件,可直接下载下来运行和查看. *高级加密标准(英语:Advanced ...
- java关于密码的加密解密
密码的加密方法有多种,常见的为Aes.Md5 Aes加密,可逆. 其中,Md5加密是采用了散列算法,也就是哈希算法,可以进行多次散列加密.Md5加密是不可逆的,无法解密. MD5是不可逆的单向加密方式 ...
- Aes 加密解密 java加密解密
使用AES加密解密代码详解 首先,如果是使用nodejs + vue 写的前端, 那么你需要npm 加载一个js文件 npm i crypto-js --save --save-exact npm i ...
- 重新想象 Windows 8 Store Apps (32) - 加密解密: 非对称算法, 数据转换的辅助类
原文:重新想象 Windows 8 Store Apps (32) - 加密解密: 非对称算法, 数据转换的辅助类 [源码下载] 重新想象 Windows 8 Store Apps (32) - 加密 ...
- N个整数(数的大小为0-255)的序列,把它们加密为K个整数(数的大小为0-255).再将K个整数顺序随机打乱,使得可以从这乱序的K个整数中解码出原序列。设计加密解密算法,且要求K<=15*N.
N个整数(数的大小为0-255)的序列,把它们加密为K个整数(数的大小为0-255).再将K个整数顺序随机打乱,使得可以从这乱序的K个整数中解码出原序列.设计加密解密算法,且要求K<=15*N. ...
- 2019-2-20C#开发中常用加密解密方法解析
C#开发中常用加密解密方法解析 一.MD5加密算法 我想这是大家都常听过的算法,可能也用的比较多.那么什么是MD5算法呢?MD5全称是 message-digest algorithm 5[|ˈmes ...
随机推荐
- dpr 与 dproj 有什么区别
- MySQL学习笔记:生成一个时间序列
今天遇到一个需求是生成以下表格的数据,一整天24小时,每秒一行数据. 寻找颇旧,找到另外两个实现的例子,暂且学习一翻.另一个见另外一篇. DAY) AS DATE FROM ( ) AS tmp, ( ...
- 20165203《Java程序设计》第四周学习总结
教材学习内容总结 第5章 子类与继承 子类的继承性 子类和父类在同一包中的继承性:子类继承父类中不是private的成员变量和方法作为自己的成员变量和方法 子类和父类不在同一包中的继承性:子类只继承父 ...
- DDD领域模型企业级系统(二)
用户层: 1.请求应用层获取用户显示的信息 2.发送命令给应用层要求执行某个命令 应用层: 对用户界面提供各种应用功能(包括信息获取与命令执行),应用层不包含业务逻辑,业务层是由应用层调用领域层(领域 ...
- ASP.NET MVC之Ajax如影随行
一.Ajax的前世今生 我一直觉得google是一家牛逼的公司,为什么这样说呢?<舌尖上的中国>大家都看了,那些美食估计你是百看不厌,但是里边我觉得其实也有这样的一个哲学:关于食材,对于种 ...
- 教你如何清除 MyEclipse/Eclipse 中 Web Browser 和 Switch Workspace 的历史记录
有些许强迫症的开发人员可能会因为 MyEclipse/Eclipse 中 Web Browser 和 Switch Workspace 冗余的历史记录而感到苦恼,下面的方法就可以有效的帮助解决你的痛点 ...
- MVC设计模式一
一:基础知识 1.mvc model view control 2.模型 是应用程序的主体部分,模型表示业务数据与业务逻辑. 一个模型可以为多个视图提供数据 提高了代码的可重用性 3.视图 用户看到的 ...
- Python 学习之list和Tuple类型
1.创建list L = ['Adam', 95.5, 'Lisa', 85, 'Bart', 59] print(L) print(L[1],L[3],L[5])#索引 不能越界 正向访问 #95. ...
- R语言实战(八)广义线性模型
本文对应<R语言实战>第13章:广义线性模型 广义线性模型扩展了线性模型的框架,包含了非正态因变量的分析. 两种流行模型:Logistic回归(因变量为类别型)和泊松回归(因变量为计数型) ...
- HDU 6103 Kirinriki (思维 双指针)
Kirinriki Time Limit: 4000/2000 MS (Java/Others) Memory Limit: 65536/65536 K (Java/Others)Total S ...