非对称算法,散列(Hash)以及证书的那些事
转载请注明出处
http://blog.csdn.net/pony_maggie/article/details/35389657
作者:小马
这几个概念在金融电子支付领域用得比較多,我忽然认为把它们串起来一起讲,层层引入,可能更好理解一些。希望能以最简单朴实的方式讲明确他们之间的关系。
一非对称算法
关于非对称算法,你仅仅要知道以下这些即可了。密钥是一对,一个叫公钥。一个叫私钥,前者公开,后者保密。如果你有一对公私钥。给你一串数据。你能够用私钥加密,然后把密文和公钥都放出去,别人能够用这个公钥解密。
相同反过来,别人也能够用这个公钥加密一串数据,你用相应的私钥解密。能够用下图来表示:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvcG9ueV9tYWdnaWU=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/SouthEast" alt="">
二 散列
散列也叫哈希。学过数据结构的人对这个概念都不陌生。简单来讲。给你一串数据A。这个数据能够非常长,你通过一个算法把它们转变成一个非常短的固定长度(无论源串有多长)的还有一串数据B。这个过程就叫散列,数据B叫数据A的散列值(或者叫哈希值,或者叫摘要)。
再深入一些。
大部分情况下。A和B是一一相应的(这也是我们希望的),也就是说,假设我还有个A1,那么它的散列值B1和B不会相等。可是理想丰满,现实让人反感,B1有可能和B相等。这样的现象有个学名叫”碰撞”,添加散列值的位数是防碰撞的一个方法。由于非常自然位数越长,全然同样的概率就越小。眼下觉得超过128位的散列值都能非常好的防碰撞。
后面我们讲到签名时,假定是没有碰撞的。
最后再补充一点。散列具有不可逆性,也就是你没法从B还原回A,即使散列算法是公开的。
三数字签名
生活中我们用签名代表自己的身份,比方领导签署一个文件,大家看到这个签名。就确认是这个领导签的,就代表他本人。
签名仅仅占用非常小的信息(通常是两个字或三个字,日本人的可能长一些),却能表示你整个人的信息,这样的思想确实意义非常大,我们把它用在电子化的签名过程,也就是数字签名。
数字签名的过程是这种,比方小明有一串数据A要发给小红,小明先用散列生成一个A的摘要B。然后把B用一个私钥加密后附在A的后面发给小红,小红有公钥(由于是公开的),她先用这个公钥解密A后面的数据得到B。然后自己把A散列一些算出一个B1, 比較B1和B假设相等,首先能说明数据是小明发过来的。由于仅仅有小明才有私钥,其次能说明A在传输过程中没有被改过,由于假设改动过。散列值肯定不相等。上述过程能够用下图说明:
可能有有会有问题,数据A似乎没有加密?,确实是这样,由于这个不是小红所关心的,小红仅仅关心这个数据是不是小明发的。数据的内容没那么重要。事实上也不难理解。就跟你去超市刷卡购物一样。小票须要你签字作为对账的凭证,人们仅仅关心这个签名是不是你本人的,对于小票的内容没这么关心。
四证书
细致想想上面的验证签名的过程,似乎天衣无缝。但事实上有个问题。小红的公钥是哪来的?有人说这个不是公开的吗。随便哪都能够,能够是问别人要的,能够是网上找的。事实上不然。验签的前提,是小红已经如果她手上的公钥和小明的私钥是一对的。如果小王生成一对非法的公私钥对,然后给小红公钥,给她说这是小明的,就会产生问题了。
所以小红要有明白的途径确认她的公钥是合法的。
打个例如,一个人站在你面前,你没法推断他是好人还是坏人,可是假设法院告诉你这个人是杀人犯,你肯定会选择相信。由于法院是权威机构。相同的。对于公钥这种”公开的敏感信息”,也须要一个权威机构来认定。
这个机构叫CA(certification authority)。这样小红仅仅要是从CA拿的公钥。就能够觉得它是合法的了。
CA一般不会直接下发公钥,它通常把公钥信息和一些附加信息(比方公钥产生的日期。有效期等)一起依照一定的格式组织起来下发。这样的组织起来的数据就叫做证书。
证书的作用就是它有一定的格式,这个格式还是个标准,全世界都用它,这样就非常方便传播。眼下用得比較多的证书就是著名的x.509。
非对称算法,散列(Hash)以及证书的那些事的更多相关文章
- javascript数据结构与算法--散列
一:javascript数据结构与算法--散列 一:什么是哈希表? 哈希表也叫散列表,是根据关键码值(key,value)而直接进行访问的数据结构,它是通过键码值映射到表中一个位置来访问记录的,散列 ...
- JavaScript数据结构与算法-散列练习
散列的实现 // 散列类 - 线性探测法 function HashTable () { this.table = new Array(137); this.values = []; this.sim ...
- 个人理解c#对称加密 非对称加密 散列算法的应用场景
c#类库默认实现了一系列加密算法在System.Security.Cryptography; 命名空间下 对称加密 通过同一密匙进行加密和解密.往往应用在内部数据传输情况下.比如公司a程序 和B程序 ...
- hash算法散列算法
Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是 ...
- 散列(hash)
散列(hash)是常用的算法思想之一,在很多程序中都会有意无意地使用到. 先来看一个简单的问题:给出N个正整数,再给出M个正整数,问这M个数中每个数分别是否在N个数中出现过. 例如N=5,M=3,N个 ...
- StackExchange.Redis帮助类解决方案RedisRepository封装(散列Hash类型数据操作)
本文版权归博客园和作者本人共同所有,转载和爬虫请注明本系列分享地址:http://www.cnblogs.com/tdws/p/5815735.html 上一篇文章的不合理之处,已经有所修改. 今天分 ...
- 散列(Hash)表入门
一.概述 以 Key-Value 的形式进行数据存取的映射(map)结构 简单理解:用最基本的向量(数组)作为底层物理存储结构,通过适当的散列函数在词条的关键码与向量单元的秩(下标)之间建立映射关系 ...
- Redis散列(Hash)的相关命令
散列 就像一个减配的Redis 内部及其类似Java的Map 内容就是key:value结构 hash类型在面向对象编程的运用中及其适合,因为它可以直接保存编程语言中的实体类关系 增 hset hse ...
- john快速破解各种散列hash
0x01 john工具安装: kali系统自带的有,也可以自己安装在其他linux和windows系统上,关于安装步骤网上都有可自行百度. 0x02 john常用选项 具体的其他选项可通过john - ...
随机推荐
- OpenJDK源码研究笔记(六)--观察者模式工具类(Observer和Observable)和应用示例
本文主要讲解OpenJDK观察者模式的2个工具类,java.util.Observer观察者接口,java.util.Observable被观察者基类. 然后,给出了一个常见的观察者应用示例. Obs ...
- 洛谷 P2630 图像变换
P2630 图像变换 题目描述 给定3行3列的图像各像素点灰度值,给定最终图像,求最短.字典序最小的操作序列. 其中,可能的操作及对应字符有如下四种: A:顺时针旋转90度: B:逆时针旋转90度: ...
- Java排序算法(二):简单选择排序
[基本思想] 在要排序的一组数中.选出最小的一个数与第一个位置的数交换:然后在剩下的数中再找出最小的与第二个位置的数交换,如此循环至倒数第二个数和最后一个数比較为止. 算法关键:找到最小的那个数.并用 ...
- 【LeetCode-面试算法经典-Java实现】【063-Unique Paths II(唯一路径问题II)】
[063-Unique Paths II(唯一路径问题II)] [LeetCode-面试算法经典-Java实现][全部题目文件夹索引] 原题 Follow up for "Unique Pa ...
- vue20 父子组件数据交互
子组件使用父组件数据 <!DOCTYPE html> <html lang="en"> <head> <meta charset=&quo ...
- C++11 volatile 类型
volatile作用: 作为指令关键字,确保本条指令不会受到编译器的优化而省略,而且要求每次直接读值. 定义: volatile int nTest; volatile关键字是一种类型修饰符,用它声明 ...
- 00075_BigInteger
1.Java中long型为最大整数类型,对于超过long型的数据如何去表示呢.在Java的世界中,超过long型的整数已经不能被称为整数了,它们被封装成BigInteger对象.在BigInteger ...
- Android底层驱动开发(一)
1 Android为什么要增加硬件抽象层HAL A 统一硬件调用接口.所以利用HAL屏蔽linux驱动的复杂不统一的接口 B 解决GPL版权问题,因为linux内核基于GPL协议.这个G ...
- 一个project师该怎样高效工作
1. 静. 在千头万绪,百般push.各种IM电话邮件狂轰滥炸中保持一个静字.找到最适合如今做的事情,情绪不要被外界所干扰.一次仅仅做一件事,不要被打断. 有的公司土鳖文化严重,领导一会儿要求你干这 ...
- (七十一)关于UITableView退出崩溃的问题和滚动究竟部的方法
[TableView退出崩溃的问题] 近期在使用TableView时偶然发如今TableView中数据较多时,假设在滚动过程中退出TableView到上一界面.会引起程序的崩溃.经过网上查阅和思考我发 ...