概述

我们都知道单向散列函数就如它的名字一般,单输入唯一的单输出,一个好的单向散列函数要具有抗碰撞的特性,而且要具有足够大的值空间。今天看到了彩虹表感觉很有意思在这里记录一下。

传统的散列函数破解

传统的关于散列函数的破解,主要就是穷举法了,但是当单向散列函数的位数到达一定程度的时候,其组成的值空间将会是十分庞大的,除非计算机的算力十分了得,否则将难以承担其背后巨大的计算流程。

散列链的生成

  • 第一步:先根据明文计算出其哈希值,此过程称为H函数,
  • 第二步:取计算出的hash值的前n(比如 n为 8)位得到新的字符串,将新的字符串作为明文,此过程称为R函数
  • 第三步:再次重复上面两步。

当面对要破解的哈希函数H,首先要定义一个函数R(此函数自己定义,只要满足该函数的定义域和值域与哈希函数相反),通过该函数可以将哈希值映射为一个与原文相同格式的值,注意这里强调的是与原文格式相同的值,因为我们要得到的就是某个散列值对应的明文,比如明文是一串8位的密码,那么通过归约函数将散列值映射为一个8位的字符串,其实本质上就是在将原明文中的密码空间的值进行列举,从本质上来说还是穷举,但是却又不像。需要强调的是,由于哈希函数是不可逆的,所以对于密文进行R运算几乎不可能得到明文原文。

彩虹表

彩虹表其实就有点像目录的查表,首先既然一个好的单向散列函数意味着唯一的输入和唯一的输出,那么当我输入A,然后利用制定好的归约函数(可以简单理解为我们设置的一个集合)对散列值进行还原,还原成集合中的密码(也就是字符集合)哈希链可以用来减少对于储存空间的需求。大致想法是通过定义一个归约函数(reduction function)R来影射散列值h在集合P中对应的密码p,集合P就是所有密码的集合(注意,这里的归约函数并不是真正意义上哈希函数的反函数。)于是就先使用hash函数,然后再使用归约函数,就这样一直持续下去,比如说持续这样的计算一百次,那么这样就得到了一个散列链如下图所示,我们最终记录在彩虹表中的内容仅仅记录散列链的首部和尾部明文字段。

假设我们在对散列函数进行散列链的操作的过程中,发现某个散列值通过R函数得到的值与彩虹表中记录的首部或者尾部的字符相同,那么就通过还原该散列链最终就可以得到原先的明文,为什么说是可能,因为即便是散列函数也有可能出现多输入,单输出的情况,也就是说出现了碰撞的情况,比如A的输出是B,C的输出也是B。

关于单向散列hash函数破解 彩虹表的简单理解相关推荐

  1. MD5单向散列算法详解

    历史: MD5 叫信息-摘要算法,是一种密码的算法,它可以对任何文件产生一个唯一的MD5验证码,每个文件的MD5码就如同每个人的指纹一样,都是不同的,这样,一旦这个文件在传输过程中,其内容被损坏或者被 ...

  2. MD5(单向散列算法)原理分析

    注:本文章转载于网络. MD5(单向散列算法)的全称是Message-Digest Algorithm 5(信息-摘要算法),经MD2.MD3和MD4发展而来.MD5算法的使用不需要支付任何版权费用. ...

  3. 密码学(一)—— 背景、常用的密码算法简介,单向散列简介、数字签名简介

    背景 密码,最初的目的就是用于对信息的加密,计算机领域的密码技术种类繁多,但随着密码学的运用,密码还用于身份认证,防止否认等功能上.最基本的,是信息加密解密分为对称加密和非对称加密,这两者的区别在于是 ...

  4. 目前常见的散列(Hash)算法

    目前常见的散列(Hash)算法 算法名称 输出大小(bits) 内部大小 区块大小 长度大小 字符尺寸 碰撞情形 HAVAL 256/224/192/160/128 256 1024 64 32 是 ...

  5. 物联网安全-单向散列算法

    单向散列函数简介 概论 ​  单项散列函数又称为安全散列函数或者哈希函数,可以将一段可变长度是输入数据转化为固定长度的一段输出值. 输入数据通常称为消息,输出数据通常称为消息摘要或者摘要,可用于检查消 ...

  6. C++中实现HMAC单向散列类

    HMAC的维基百科解释是:hash-based message authentication code,其实就是加了盐的单向散列算法.而HMAC的重点就是如何给要散列的数据加盐. 加盐公式如下: 解释 ...

  7. hash table(完全散列实现的哈希表)

    hash table(完全散列实现的哈希表) 完全散列 特点:静态的,创建时候完成了散列表的生成. 不可以删,也不可以增加数据.只可以修改数据. 内部用全域散列生成 #ifndef C11LEARN_ ...

  8. hash table(开放寻址法-双重散列实现的哈希表)

    hash table(开放寻址法-双重散列实现的哈希表) #ifndef C11LEARN_HASHDOUBLE_H #define C11LEARN_HASHDOUBLE_H #include &q ...

  9. 散列算法和哈希表结构

    散列算法和哈希表结构 散列算法和哈希表结构 算法概述 Hash ,一般翻译做" 散列" ,也有直接音译为" 哈希" 的,就是把任意长度的输入(又叫做预映射, p ...

  10. 散列(hash)练习题

    目录 谁是你的潜在朋友 [★] 是唯一的 [★] 字符串减法 [★★] 分组统计[★★★] 在哈希这一块常用的问题包括:判断<=105个正整数中某m个正整数是否出现过.出现了多少次--声明boo ...

最新文章

  1. 开启注册丨EMNLP 2021论文预讲会,邀你一起共赏自然语言处理学术盛宴(日程全公开)...
  2. 找到那些氪金大佬,然后榨干他们丨AIの特殊技能
  3. centos7完全卸载删除nginx
  4. 【Linux系统编程】线程堆栈大小的使用介绍
  5. [html] DOM节点的根节点是不是body?
  6. xdoj判断堆栈出栈序列是否有效c++
  7. Windows Mobile 模拟器网络连接设置
  8. ROS学习笔记7(理解ROS服务和参数)
  9. cpanel java_Cpanel是什么
  10. 放下十样东西,你会更优秀!
  11. node.js 谷歌翻译api
  12. ES6中的模块化编程
  13. texmacs 源码安装
  14. Top10 ProxyClient 支持指定进程的代理客户端软件
  15. 2021杭电多校第八场补题
  16. 海港中学2021高考成绩查询,热烈祝贺海港高中2020年高考再创佳绩
  17. python数值运算m op n_M OP N数值运算问题
  18. Linux mtd与ubi关系详解,ubi使用命令总结
  19. win10修复计算机摁什么,win10修复引导工具怎么用?老司机教你使用win10修复引导工具...
  20. 将B站上下载的两个m4s文件合成为mp4文件

热门文章

  1. 用python的matplotlib和numpy库绘制股票K线均线
  2. eNSP交换机配置VLAN
  3. Flask--网页微信登陆示例
  4. 班主任工作总结中职计算机网络,中职班主任工作总结(优秀篇).doc
  5. 微信第三方平台对接小程序发版
  6. python运行部分代码
  7. ae中合成设置的快捷键_Adobe AE快捷键大全
  8. 基于Bootstrap模板创建门户网站vue项目01
  9. Python实现文件搜索
  10. js将两张图片合成一张图片