对消息的接收方来说,安全的交流方式需要同时满足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. 《精通Python设计模式》学习之建造者模式

    这种模式,就是将一个最终对象分级分层建造出来. 在软件发布过程中,不同的JAVA,PYTHON,NODE.JS,ZIP压缩包, 就可以使用不同的阶段来使用建造者模式的. from enum impor ...

  2. CCF CSP 201512-2 消除类游戏

    CCF计算机职业资格认证考试题解系列文章为meelo原创,请务必以链接形式注明本文地址 CCF CSP 201512-2 消除类游戏 问题描述 消除类游戏是深受大众欢迎的一种游戏,游戏在一个包含有n行 ...

  3. 8VC Venture Cup 2016 - Elimination Round F - Group Projects dp好题

    F - Group Projects 题目大意:给你n个物品, 每个物品有个权值ai, 把它们分成若干组, 总消耗为每组里的最大值减最小值之和. 问你一共有多少种分组方法. 思路:感觉刚看到的时候的想 ...

  4. Kibana部署及配置(四)

    一.Kibana安装 Kibana 是为 Elasticsearch 设计的开源分析和可视化平台.你可以使用 Kibana 来搜索,查看存储在 Elasticsearch 索引中的数据并与之交互.你可 ...

  5. MongoDB图形化管理工具Toad Mac Edition

    昨天介绍了在Mac上安装MongoDB,安装好并配置环境变量后,在终端上用mongo命令就可以进入MongoDB的命令行管理界面,但我更习惯在图形化界面下管理数据库,这样更直观.今天我再介绍一款在Ma ...

  6. 41:和为S的两个数

    import java.util.ArrayList; import java.util.Collections; /** * 面试题41:和为S的两个数 * 输入一个递增排序的数组和一个数字S,在数 ...

  7. 在Ubuntu18.04中QT编程的环境构建(转)

    在Ubuntu18.04中QT编程的环境构建 原点分析 百家号06-2110:14 如果说QT大家觉得陌生的话,那么 Windows 早年推出的C++图形用户界面的应用程序开发框架MFC,应该是耳熟能 ...

  8. 查看锁信息(开启InnoDB监控)

    当前mysql版本:5.6.21 一.背景 在mysql处理死锁问题时,由于show engine innodb status输出来的死锁日志无任务事务上下文,并不能很好地诊断相关事务所持有的所有锁信 ...

  9. 美团针对Redis Rehash机制的探索和实践

    背景 Squirrel(松鼠)是美团技术团队基于Redis Cluster打造的缓存系统.经过不断的迭代研发,目前已形成一整套自动化运维体系,涵盖一键运维集群.细粒度的监控.支持自动扩缩容以及热点Ke ...

  10. Android 使用ViewPager 做的半吊子的图片轮播

    Android 使用ViewPager 做的半吊子的图片轮播 效果图 虽然不咋样,但是最起码的功能是实现了,下面我们来一步步的实现它. 界面 下面我们来分析一下界面的构成 整体的布局: 因为我们要做出 ...