绑定完请刷新页面
取消
刷新

分享好友

×
取消 复制
算法系列:5分钟了解哈希算法
2019-05-30 17:05:13

前言

哈希算法是现代密码体系中的一个重要组成部分。大家比较感兴趣的数字货币,就使用了哈希算法。


哈希算法简介

哈希(hash)算法又称为散列算法,通过hash算法,可以将任意长度的信息转换成一个固定长度的二进制数据,我们经常会使用十六进制值来表示转换后的信息。

比如,数字123,使用md5的hash算法后,得到十六进制的值:202cb962ac59075b964b07152d234b70

哈希算法的特点:

(1)不同的信息,理论上得到的hash值不同,我们称之为“无碰撞”,或者发生“碰撞”的概率非常小。

(2)不可逆,hash算法是单向的,从hash值反向推导出原始信息是很困难的。所以,有些系统中,我们可以使用hash算法对密码进行处理后保存。

hash算法的主要应用:

(1) 数据完整性校验

我们可以将原始数据和经过哈希算法得到数据一块发送给对方,对方收到数据之后,对数据使用相同的哈希算法进行计算,如果得到的哈希值和对方发过来的相同,那么就说明数据没有经过篡改。

(2) 数字签名

一般我们先对原始数据进行hash处理,然后对处理后的数据使用私钥进行加密。将原始数据和加密后数据发送给接收方。接收方使用公钥解密,然后对数据进行hash处理,后对比,借此实现用户身份的验证。


常见哈希算法

1 MD5

MD5在90年代初由MIT的计算机科学实验室和RSA Data Security Inc发明,经MD2、MD3和MD4发展而来。

MD5以512位分组来处理输入的信息,且每一分组又被划分为16个32位子分组,经过了一系列的处理后,算法的输出由四个32位分组组成,将这四个32位分组级联后将生成一个128bit位散列值。

2 SHA-1

SHA(Secure Hash Algorithm)安全散列算法是一个密码散列家族,由美国国家安全局(NSA)所设计,也是一种哈希算法。

SHA-1 算法输入以512位数据块为单位处理,产生160比特的消息摘要作为输出。

3 代码

如果我们想使用相关hash算法进行处理,一般不需要自己进行实现,只需要调用java或者第三方提供的代码即可。比如,如果想根据md5算法得到一个字符串的的hash值,代码如下:

public static String md5(String plainText) {

//定义一个字节数组

byte[] secretBytes = null;

try {

// 生成一个MD5计算摘要的对象

MessageDigest md = MessageDigest.getInstance("MD5");

//对字符串进行hash处理

md.update(plainText.getBytes());

//获得hash运算后数据

secretBytes = md.digest();

} catch (NoSuchAlgorithmException e) {

throw new RuntimeException("没有md5这个算法!");

}

//将hash后的数据转换为16进制数字

String md5code = new BigInteger(1, secretBytes).toString(16);// 16进制数字

// 如果生成数字未满32位,需要前面补0

for (int i = 0; i < 32 - md5code.length(); i++) {

md5code = "0" + md5code;

}

return md5code;

}


总结

哈希算法有很多,计算过程也比较复杂,但是大多数情况下,我们不用自己写代码实现这些算法,只需要调用相关算法库中的方法即可。

分享好友

分享这个小栈给你的朋友们,一起进步吧。

Spring Boot
创建时间:2020-06-22 17:22:00
SpringBoot是由Pivotal团队在2013年开始研发、2014年4月发布个版本的全新开源的轻量级框架。它基于Spring4.0设计,不仅继承了Spring框架原有的特性,而且还通过简化配置来进一步简化了Spring应用的整个搭建和开发过程。另外SpringBoot通过集成大量的框架使得依赖包的版本冲突,以及引用的不稳定性等问题得到了很好的解决。
展开
订阅须知

• 所有用户可根据关注领域订阅专区或所有专区

• 付费订阅:虚拟交易,一经交易不退款;若特殊情况,可3日内客服咨询

• 专区发布评论属默认订阅所评论专区(除付费小栈外)

栈主、嘉宾

查看更多
  • duanhao
    栈主

小栈成员

查看更多
  • ?
  • zander
  • 凉茶cooltea
戳我,来吐槽~