转载请注明出处

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. unity 自动删除未引用的Assets下的资源

    随着时间的堆积,项目中Assets文件夹下的资源会变得越来越繁杂,有些贴图.材质啥的可能压根没有使用过,但是又不敢轻易去删除. 这里分享两个插件,用于管理这些资源. 一.ResourceChecker ...

  2. KM最大匹配 HDU 2255

    KM算法详解+模板 - wenr - 博客园  http://www.cnblogs.com/wenruo/p/5264235.html #include<iostream> #inclu ...

  3. iOS打造属于自己的用户行为统计系统

      打造一款符合自己公司需求的用户行为统计系统,相信是非常多运营人员的梦想,也是开发人员对技术的的执着追求. 以下我为大家分一享下自己为公司打造的用户行为统计系统.   用户行为统计(User Beh ...

  4. WEB前端,混合排版,有的宽有的窄,滚动会出现空白处,怎么办。

    多数时候出现空白都是由于有滚动栏滚到一边就会产生空白. overflow-x: hidden; 在最大图的那个div里写这句.

  5. POJ 1088: 滑雪(经典 DP+记忆化搜索)

    滑雪 Time Limit: 1000MS   Memory Limit: 65536K Total Submissions: 74996   Accepted: 27818 Description ...

  6. 设计模式 - 组合模式(composite pattern) 迭代器(iterator) 具体解释

    组合模式(composite pattern) 迭代器(iterator) 具体解释 本文地址: http://blog.csdn.net/caroline_wendy 參考组合模式(composit ...

  7. Track Active Item in Solution Explorer

    Tools-->Options-->Projects and Solutions-->Track Active Item in Solution Explorer

  8. Flex XML/XMLList 常用操作

    1       XML.XMLList操作 Flex对xml提供了很多强大而灵活的操作.相对于其他语言,flex对xml的格式要求不那么苛刻,只要符合基本格式语法的字符串,flex能非常简单的转换成x ...

  9. Ace在线编辑器使用requirejs配置

    Ace代码在线编辑器如果需要在requirejs里使用,注意需要使用github上lib/ace目录的文件. 如果使用ajaxorg/ace-builds下面的代码再使用requirejs会报错,不能 ...

  10. pwd---以绝对路径的方式显示用户当前工作目录

    pwd命令以绝对路径的方式显示用户当前工作目录.命令将当前目录的全路径名称(从根目录)写入标准输出.全部目录使用/分隔.第一个/表示根目录,最后一个目录是当前目录.执行pwd命令可立刻得知您目前所在的 ...