Hash算法原理
Hash算法
一、定义
Hash译为把…弄糟(乱)。哈希函数又被称为散列函数、杂凑函数。是把任意长度的输入(又叫做预映射pre-image)通过散列算法变换成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间。不同的输入可能会散列成相同的输出,也就是哈希碰撞。
1 | 简单说就是: |
二、哈希函数的实现
这里以一种简单的实现方法:平方取中法
- 传入一个字符参数,把该字符参数转换为Unicode序号
- 把这个序号平方
- 再取平方中的2~7这四位数,得到值
1 | import java.math.BigDecimal; |
这里终端得到的值为
1 | "C:\Program Files\Java\jdk1.8.0_301\bin\java.exe" ... |
即更换不同的字符串a,可以输出一个毫无规律的4位数字。而且通过这个四位数无法逆向推到出字符串a。这就是一个简单的哈希算法。
三、常用的几个Hash函数
通过增加Hash函数的输出长度,可以减少Hash碰撞的概率。常用的Hash函数有MD4,MD5,SHA-0,SHA-1,SHA-1。现在大部分加密采用的都是SHA-2,其中比特币的数字签名加密算法的就是SHA-256。
四、Hash函数的应用
现在Hash函数基本上是无处不在如平时用到的用户密码、密钥等加密。甚至这几年非常火爆的区块链BTC比特币也是运用SHA-256算法来进行加密防止它人恶意篡改数字签名。
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Markの小破站!
评论