非对称算法,散列(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 - ...
随机推荐
- python 进阶:修饰器的介绍
参考链接:Python 函数装饰器 我认为python中的装饰器是一个很厉害的功能,他能瞬间提升代码的逼格,但对于我这样的小白来说,别说为所欲为的使用了,就连简单的尝试一下,却也是难于登天.经过长达半 ...
- Java基础学习总结(18)——网络编程
一.网络基础概念 首先理清一个概念:网络编程 != 网站编程,网络编程现在一般称为TCP/IP编程. 二.网络通信协议及接口 三.通信协议分层思想 四.参考模型 五.IP协议 每个人的电脑都有一个独一 ...
- CCNP路由实验之十 组播(多播)
CCNP路由实验之十 组播(多播) 种方法: 在交换机上配置静态的多播MAC地址到用户接口的映射 使用CGMP.执行CGMP的多播路由器能够将用户发送给自己 ...
- thinkphp5内置标签
thinkphp5内置标签 知道内置标签怎么用,查手册的时候好查 却功能的时候在里面找着来用 内置标签一览 内置标签 变量输出使用普通标签就足够了,但是要完成其他的控制.循环和判断功能,就需要借助模板 ...
- js数组与字符串的相互转换方法 数组常用的方法
1 数组转字符串 需要将数组元素用某个字符连接成字符串,示例代码如下: var a, b; a = new Array(0,1,2,3,4); b = a.join("-"); 二 ...
- vue --- 脚手架初始化项目中配置文件webpack.base.conf.js代码含义
'use strict' //引入node path 中间件 可以获取到 path 路径的一些信息 const path = require('path') //引入utils工具模块 utils主要 ...
- 用JS把复选框做成单选框,左显示div,右隐藏div
<input type="checkbox" name="checkname" onclick="check(this)"/>左 ...
- P2038 无线网络发射器选址
题目描述 随着智能手机的日益普及,人们对无线网的需求日益增大.某城市决定对城市内的公共场所覆盖无线网. 假设该城市的布局为由严格平行的129 条东西向街道和129 条南北向街道所形成的网格状,并且相邻 ...
- 玲珑杯 Round #18 A -- 计算几何你瞎暴力
因为坐标都在1-10之间,因此可暴力求解 #include <iostream> #include <cstdio> #include <cstring> #inc ...
- 织梦(dedecms)彩色标签云(tag)随机颜色和字体大小
1.选择你所要加页面的模板,一般是在首页index.htm 加上如下代码 01 <!-- /下面开始tag标签云 --> 02 <dl class="tbox light& ...