对消息的接收方来说,安全的交流方式需要同时满足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中加密解密基本概念的更多相关文章

  1. java中加密解密工具类

    在工作中经常遇到需要加密.解密的场景.例如用户的手机号等信息,在保存到数据库的过程中,需要对数据进行加密.取出时进行解密. public class DEStool { private String ...

  2. .Net中的加密解密

    返回博客列表 转 .Net中的加密解密 李朝强 发布时间: 2015/11/23 12:55 阅读: 33 收藏: 3 点赞: 0 评论: 0 在一些比较重要的应用场景中,通过网络传递数据需要进行加密 ...

  3. .net中加密与解密

    .Net中的加密解密 引言 在一些比较重要的应用场景中,通过网络传递数据需要进行加密以保证安全.本文将简单地介绍了加密解密的一些概念,以及相关的数字签名.证书,最后介绍了如何在.NET中对数据进行对称 ...

  4. Aes加密/解密示例项目

    #AesEncrypt:Aes加密/解密示例项目 <br> 附件中的“AesEncrypt.zip”是本项目的exe文件,可直接下载下来运行和查看. *高级加密标准(英语:Advanced ...

  5. java关于密码的加密解密

    密码的加密方法有多种,常见的为Aes.Md5 Aes加密,可逆. 其中,Md5加密是采用了散列算法,也就是哈希算法,可以进行多次散列加密.Md5加密是不可逆的,无法解密. MD5是不可逆的单向加密方式 ...

  6. Aes 加密解密 java加密解密

    使用AES加密解密代码详解 首先,如果是使用nodejs + vue 写的前端, 那么你需要npm 加载一个js文件 npm i crypto-js --save --save-exact npm i ...

  7. 重新想象 Windows 8 Store Apps (32) - 加密解密: 非对称算法, 数据转换的辅助类

    原文:重新想象 Windows 8 Store Apps (32) - 加密解密: 非对称算法, 数据转换的辅助类 [源码下载] 重新想象 Windows 8 Store Apps (32) - 加密 ...

  8. N个整数(数的大小为0-255)的序列,把它们加密为K个整数(数的大小为0-255).再将K个整数顺序随机打乱,使得可以从这乱序的K个整数中解码出原序列。设计加密解密算法,且要求K<=15*N.

    N个整数(数的大小为0-255)的序列,把它们加密为K个整数(数的大小为0-255).再将K个整数顺序随机打乱,使得可以从这乱序的K个整数中解码出原序列.设计加密解密算法,且要求K<=15*N. ...

  9. 2019-2-20C#开发中常用加密解密方法解析

    C#开发中常用加密解密方法解析 一.MD5加密算法 我想这是大家都常听过的算法,可能也用的比较多.那么什么是MD5算法呢?MD5全称是 message-digest algorithm 5[|ˈmes ...

随机推荐

  1. Owin 自定义中间件(2)中间件进阶

    前面一篇文章简单的介绍了中间件的应用 下面编写一个自定义的中间件类库,并加入中间件参数以及引入日志记录中间件的异常 下面来看下中间件的构造,参数可以自定义 这里我定义了一个参数类 编写中间件需要引入 ...

  2. Ubuntu下编译安装OpenCV 2.4.7并读取摄像头

    主要参考: 1.http://www.ozbotz.org/opencv-installation/ 2.http://www.ozbotz.org/opencv-install-troublesho ...

  3. chromiumFx编译使用

    CEF chormeFx 为针对.Net的CEF框架,下载链接为: https://bitbucket.org/chromiumfx/chromiumfx 点击Download可以下载chromium ...

  4. USACO 4.4 Shuttle Puzzle

    Shuttle PuzzleTraditional The Shuttle Puzzle of size 3 consists of 3 white marbles, 3 black marbles, ...

  5. Server sent passive reply with unroutable address. Using server address instead

    最近在linux服务器安装vsftp服务.经过一轮设置,终于可以连接上了,用winSCP连接,刷新目录就提示这个错误. 解决办法: vim /etc/vsftpd.conf  ,编辑配置文件,最后加上 ...

  6. Python下opencv使用笔记(图像的平滑与滤波)

    对于图形的平滑与滤波,但从滤波角度来讲,一般主要的目的都是为了实现对图像噪声的消除,增强图像的效果. 对于2D图像可以进行低通或者高通滤波操作 低通滤波(LPF):有利于去噪,模糊图像 高通滤波(HP ...

  7. python 关键知识点

    学习资源:笨方法学习 python3 将变量传递给脚本--argv 脚本:你编写的 .py 文件. argv 参数变量(argument variable)保存着你运行 python 脚本的参数. i ...

  8. 【原创】Linux常用脚本

    #1.启用停用VIP sudo /etc/ha.d/resource.d/IPaddr 10.10.10.10 start sudo /etc/ha.d/resource.d/IPaddr 10.10 ...

  9. 机器学习之路: python 实践 提升树 XGBoost 分类器

    git: https://github.com/linyi0604/MachineLearning 数据集被我下载到本地,可以去我的git上拿数据集 XGBoost提升分类器 属于集成学习模型 把成百 ...

  10. 决策树算法(C4.5)

    ID3具有一定的局限性,即信息增益倾向于选择取值比较多的特征(特征越多,条件熵(特征划分后的类别变量的熵)越小,信息增量就越大),C4.5通过选择最大的信息增益率 gain ratio 来选择节点可以 ...