前言

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

哈希算法简介

哈希(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;

}

总结

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

算法系列:5分钟了解哈希算法相关推荐

  1. 希尔排序的详细过程_算法系列: 10大常见排序算法(4)希尔排序

    本课程是从少年编程网转载的课程,目标是向中学生详细介绍计算机比赛涉及的编程语言,数据结构和算法.编程学习最好使用计算机,请登陆 www.3dian14.org (免费注册,免费学习). 一句 希尔排序 ...

  2. 算法学习笔记13:哈希算法

    哈希算法(上):如何防止数据库中的用户信息被脱库 什么是哈希算法 应用一:安全加密 应用二:唯一标识 应用三:数据校验 应用四:散列函数 解答开篇 哈希算法(下):哈希算法在分布式系统中有哪些应用 应 ...

  3. 共识算法系列之一:raft和pbft算法

    共识算法系列之一:raft和pbft算法 注:文章最初是在2018年5月7日发布在知乎的美图技术团队系列文章. 作者简介:梁敏鸿,美图区块链架构师,专注于区块链技术研究与产品应用落地. 导语:区块链技 ...

  4. 机器学习算法系列(四)- 岭回归算法(Ridge Regression Algorithm)

    阅读本文需要的背景知识点:标准线性回归算法.一丢丢编程知识 一.引言   前面一节我们学习了机器学习算法系列(三)- 标准线性回归算法(Standard Linear Regression Algor ...

  5. 算法:五分钟了解一致性hash算法

    五分钟了解一致性hash算法 前言 一致性哈希算法的设计目标是为了解决因特网中的热点问题,现在也被广泛应用在分布式系统中. 比如针对负载均衡问题,对hash值取模的算法扩展性差,当增加或者减少服务器时 ...

  6. 一致性hash算法虚拟节点_一致性哈希算法——虚拟节点

    一致性哈希算法--虚拟节点 一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是 ...

  7. 22 | 哈希算法(下):哈希算法在分布式系统中有哪些应用?

    本节分析哈希算法的其他三个应用:负载均衡.数据分片.分布式存储.这三个应用都跟分布式系统有关.看下哈希算法是如何解决这些分布式问题的. 五:负载均衡 问题:那如何才能实现一个会话粘滞(session ...

  8. 【夜深人静写数据结构与算法 | 第八篇】哈希算法与哈希表

    目录 前言: 哈希: 哈希表: 哈希表组成: 哈希表实例: 哈希函数: TIPS: 总结 前言: 如果此时我要你默写一个有一百位的数字,你要如何做才能保证不会漏写呢?我们有一种方法很好用:直接数我们写 ...

  9. 机器学习算法系列(一)-基础机器学习算法入门

    问题思考 1 您熟悉那些学习算法? 2 您应用那些机器学习算法? 本篇内容主要是面向机器学习初学者,介绍常见的机器学习算法,当然,欢迎各位小伙伴一起交流. 哲学要回答的基本问题是从哪里来.我是谁.到哪 ...

最新文章

  1. WebStorm配置本地测试服务器
  2. SAP UB类型的STO能自动创建交货单?
  3. 国拨经费约31.48亿!科技部发布科技创新2030 —“脑科学与类脑研究”重大项目2021年度项目申报指南
  4. 玩转数据结构从入门到进阶四
  5. zz 标 题: 求weka JVM outofMemory问题的解决方案【已解决】
  6. java atm模拟系统_Java RPC模式开发一个银行atm模拟系统
  7. hive 中文字符过滤_0650-6.2.0-通过UDF实现HiveImpala的中文拼音排序
  8. Linux安装SmartSVN及破解
  9. 维珍创始人的10大成功秘诀
  10. 什么标签用于在表单中构建复选框_以下 ( ) 标签用于在表单中构建复选框 。_IP通信技术答案_学小易找答案...
  11. 苹果id登陆不上去怎么回事_shopee虾皮台湾站 app怎么登陆不上去,shopee虾皮台湾站app最新版...
  12. linux定时器原理
  13. 华为android打开usb调试模式,华为P6 USB调试在哪 如何打开USB调试【详解】
  14. webp格式以及工具介绍
  15. shell以分号结尾_linux shell 各种分号,括号使用方法总结
  16. 暾盛机器人_移动机器人视觉伺服.pdf
  17. 面试题-redis数据类型
  18. 数据库 数据目录
  19. 采集到竞品数据的10个经典方法
  20. 计算机专业学渣面试,感觉读了计算机专业真的是一条不归路

热门文章

  1. IIS网站或系统验证码不显示问题——使用了托管的处理程序,但是未安装或未完整安装 ASP.NET...
  2. 授人以鱼不如授人以渔,UCHome全面大解析培训活动【第三集】
  3. 如何用CSS画一个三角形
  4. java中math类方法之数学运算(pow,exp,三角函数,指数)
  5. Rulo扫地机器人app_扫地机器人怎么选?扫地机器人怎么用
  6. Golang——HTTP编程请求和响应实现
  7. 图像水平梯度和竖直梯度代码_Opencv图像处理(三)
  8. gin context和官方context_Go语言gin框架从入门到精通(3)
  9. java在线编辑器_微软开源在线代码编辑器——Monaco Editor
  10. 岗位po是什么意思_面试时,面试官问你有什么优点和缺点?应该如何巧妙的回答?...