Hash简介

Hash-----即散列,程序员小伙伴在听到他的时候差不多都一个反应:“Hash啊!知道,HashMap,HashTable,哈希表。。。。balabala。。。。”。我原来也是其中一员啊,说起来真是惭愧。

前段时间刚看到人生的四种境界:

一、不知道自己不知道

二、知道自己不知道

三、不知道自己知道

四、知道自己知道

本人也是刚刚升级Level 2 ,知道自己不知道了怎么办?不懂就赶紧学嘛。所以近期恶补了基础,在这里记录一下。

hash算法能把任意长度的目标文本转换成长度固定且不可逆的结果,术语叫杂凑字符串。这里就引出了hash的两个问题:
一、这种压缩映射就造成了输入集一定比结果集大,也就注定了会出现不同输入得到相同输出的可能。这种可能我们称之为“碰撞”,我们希望的是不出现碰撞。
二、第二个特性是不可逆,也叫单向加密。

我把hash分成三部分:输入(目标文本)、算法、输出(杂凑字符串)。
这样我们就好理解了,现在只要关心算法就好了。Hash算法最流行的当属MD5、SHA-1。
MD5算法是Ronald L. Rivest教授于1991年设计的,他也是RSA创始人之一。
SHA-1是美国国家标准与技术研究院与美国国家安全局设计推行的算法。美国政府和金融系统采用,是美国政府目前应用最广泛的密码算法。

我们什么时候选择哈希
现在hash算法多用于数字签名。使用hash的前提是我们不需要知道也不需要还原明文,只需要对比密文。
如何破解:
针对哈希的攻击有寻找碰撞和穷举法两种。
寻找碰撞:一个哈希算法 R = H(S) 是一个多对一映射,给定目标文本S,H可以将其唯一映射为R,并且对于所有S,R具有相同的长度。由于是多对一映射,所以H不存在逆映射 S = H-1(R) 使得R转换为唯一的S。但如果出现S1≠S2,  H(S1)=H(S2)  则S1和S2互为碰撞。
                  但是自从王小云教授破解两大算法后,数字签名安全性大大降低,人们在寻求新的更安全的hash算法。
穷举法:把一定范围内的值循环做哈希然后拿结果跟杂凑字符串比对。虽然简单密码容易破解,但很多时候我们不能强迫用户,这时可以使用多重hash          进行加密。使用自定义KEY,配合不同的哈希函数进行多次哈希    如:  R = SHA1( MD5(S) MD5(KEY) )。

这是一个hash算法破译网站: http://www.ttmd5.com/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值