转载请注明出处

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)以及证书的那些事的更多相关文章

  1. javascript数据结构与算法--散列

    一:javascript数据结构与算法--散列  一:什么是哈希表? 哈希表也叫散列表,是根据关键码值(key,value)而直接进行访问的数据结构,它是通过键码值映射到表中一个位置来访问记录的,散列 ...

  2. JavaScript数据结构与算法-散列练习

    散列的实现 // 散列类 - 线性探测法 function HashTable () { this.table = new Array(137); this.values = []; this.sim ...

  3. 个人理解c#对称加密 非对称加密 散列算法的应用场景

    c#类库默认实现了一系列加密算法在System.Security.Cryptography; 命名空间下 对称加密 通过同一密匙进行加密和解密.往往应用在内部数据传输情况下.比如公司a程序 和B程序 ...

  4. hash算法散列算法

    Hash,一般翻译做“散列”,也有直接音译为“哈希”的,就是把任意长度的输入(又叫做预映射, pre-image),通过散列算法,变换成固定长度的输出,该输出就是散列值.这种转换是一种压缩映射,也就是 ...

  5. 散列(hash)

    散列(hash)是常用的算法思想之一,在很多程序中都会有意无意地使用到. 先来看一个简单的问题:给出N个正整数,再给出M个正整数,问这M个数中每个数分别是否在N个数中出现过. 例如N=5,M=3,N个 ...

  6. StackExchange.Redis帮助类解决方案RedisRepository封装(散列Hash类型数据操作)

    本文版权归博客园和作者本人共同所有,转载和爬虫请注明本系列分享地址:http://www.cnblogs.com/tdws/p/5815735.html 上一篇文章的不合理之处,已经有所修改. 今天分 ...

  7. 散列(Hash)表入门

    一.概述 以 Key-Value 的形式进行数据存取的映射(map)结构 简单理解:用最基本的向量(数组)作为底层物理存储结构,通过适当的散列函数在词条的关键码与向量单元的秩(下标)之间建立映射关系 ...

  8. Redis散列(Hash)的相关命令

    散列 就像一个减配的Redis 内部及其类似Java的Map 内容就是key:value结构 hash类型在面向对象编程的运用中及其适合,因为它可以直接保存编程语言中的实体类关系 增 hset hse ...

  9. john快速破解各种散列hash

    0x01 john工具安装: kali系统自带的有,也可以自己安装在其他linux和windows系统上,关于安装步骤网上都有可自行百度. 0x02 john常用选项 具体的其他选项可通过john - ...

随机推荐

  1. 用例子看ASP.NET Core Identity是什么?

    原文:用例子看ASP.NET Core Identity是什么? 目录 前言 基于声明的认证(Claims-based Authentication) Claim 在ASP.NET Core Iden ...

  2. MyBatis学习总结(17)——Mybatis分页插件PageHelper

    如果你也在用Mybatis,建议尝试该分页插件,这一定是最方便使用的分页插件. 分页插件支持任何复杂的单表.多表分页,部分特殊情况请看重要提示. 想要使用分页插件?请看如何使用分页插件. 物理分页 该 ...

  3. Intel Media SDK 性能測试

    经过測试,发如今windows 7上 i3 i5 上Intel Media SDK 1080P仅仅能解6路,720P仅仅能解8路, 不知大家有没有測试过?

  4. mybatis :与Spring MVC 的集成

    用mybatis与Spring mvc 的方式集成起来,源码在本文结尾处下载.主要有以下几个方面的配置1. web.xml 配置 spring dispatchservlet ,比如为:mvc-dis ...

  5. spring-cloud导入eclipse时,@slf4j注解为什么找不到log变量

    原因是缺少插件Lomboz. Lomboz是一个基于LGPL的开源J2EE综合开发环境的Eclipse插件,对编码,发布,测试,以及debug等各个软件开发的生命周期提供支持,支持JSP,EJB等.L ...

  6. Linux系统病毒防治

    Linux系统病毒防治 一.Linux病毒的历史 1996年出现的Staog是Linux系统下的第一个病毒,它出自澳大利亚一个叫VLAD的组织.Staog病毒是用汇编语言编写,专门感染二进制文件,并通 ...

  7. RedHat Linux 下安装、测试摄像头

    RedHat Linux 下安装.测试摄像头(全文见附件)     随着视频电话的迅速发展我相信大家一定有过在Windows 下安装摄像头的经历,然而大多数 都不支持Linux .我现以罗技摄像头为例 ...

  8. Coderfroces 862 B . Mahmoud and Ehab and the bipartiteness

     Mahmoud and Ehab and the bipartiteness Mahmoud and Ehab continue their adventures! As everybody in ...

  9. android开源项目---View篇

    本文转载自:http://blog.csdn.net/likebamboo/article/details/19080739 主要介绍那些不错个性化的View,包括ListView.ActionBar ...

  10. ping 原理及ICMP协议简介

    //Ping IP/域名 public static String pingIPCennect(String ipStr) {  String result = "";  if ( ...