算法系列:5分钟了解哈希算法
前言
哈希算法是现代密码体系中的一个重要组成部分。大家比较感兴趣的数字货币,就使用了哈希算法。
哈希算法简介
哈希(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分钟了解哈希算法相关推荐
- 希尔排序的详细过程_算法系列: 10大常见排序算法(4)希尔排序
本课程是从少年编程网转载的课程,目标是向中学生详细介绍计算机比赛涉及的编程语言,数据结构和算法.编程学习最好使用计算机,请登陆 www.3dian14.org (免费注册,免费学习). 一句 希尔排序 ...
- 算法学习笔记13:哈希算法
哈希算法(上):如何防止数据库中的用户信息被脱库 什么是哈希算法 应用一:安全加密 应用二:唯一标识 应用三:数据校验 应用四:散列函数 解答开篇 哈希算法(下):哈希算法在分布式系统中有哪些应用 应 ...
- 共识算法系列之一:raft和pbft算法
共识算法系列之一:raft和pbft算法 注:文章最初是在2018年5月7日发布在知乎的美图技术团队系列文章. 作者简介:梁敏鸿,美图区块链架构师,专注于区块链技术研究与产品应用落地. 导语:区块链技 ...
- 机器学习算法系列(四)- 岭回归算法(Ridge Regression Algorithm)
阅读本文需要的背景知识点:标准线性回归算法.一丢丢编程知识 一.引言 前面一节我们学习了机器学习算法系列(三)- 标准线性回归算法(Standard Linear Regression Algor ...
- 算法:五分钟了解一致性hash算法
五分钟了解一致性hash算法 前言 一致性哈希算法的设计目标是为了解决因特网中的热点问题,现在也被广泛应用在分布式系统中. 比如针对负载均衡问题,对hash值取模的算法扩展性差,当增加或者减少服务器时 ...
- 一致性hash算法虚拟节点_一致性哈希算法——虚拟节点
一致性哈希算法--虚拟节点 一致性哈希算法是分布式系统中常用的算法.比如,一个分布式的存储系统,要将数据存储到具体的节点上,如果采用普通的hash方法,将数据映射到具体的节点上,如key%N,key是 ...
- 22 | 哈希算法(下):哈希算法在分布式系统中有哪些应用?
本节分析哈希算法的其他三个应用:负载均衡.数据分片.分布式存储.这三个应用都跟分布式系统有关.看下哈希算法是如何解决这些分布式问题的. 五:负载均衡 问题:那如何才能实现一个会话粘滞(session ...
- 【夜深人静写数据结构与算法 | 第八篇】哈希算法与哈希表
目录 前言: 哈希: 哈希表: 哈希表组成: 哈希表实例: 哈希函数: TIPS: 总结 前言: 如果此时我要你默写一个有一百位的数字,你要如何做才能保证不会漏写呢?我们有一种方法很好用:直接数我们写 ...
- 机器学习算法系列(一)-基础机器学习算法入门
问题思考 1 您熟悉那些学习算法? 2 您应用那些机器学习算法? 本篇内容主要是面向机器学习初学者,介绍常见的机器学习算法,当然,欢迎各位小伙伴一起交流. 哲学要回答的基本问题是从哪里来.我是谁.到哪 ...
最新文章
- WebStorm配置本地测试服务器
- SAP UB类型的STO能自动创建交货单?
- 国拨经费约31.48亿!科技部发布科技创新2030 —“脑科学与类脑研究”重大项目2021年度项目申报指南
- 玩转数据结构从入门到进阶四
- zz 标 题: 求weka JVM outofMemory问题的解决方案【已解决】
- java atm模拟系统_Java RPC模式开发一个银行atm模拟系统
- hive 中文字符过滤_0650-6.2.0-通过UDF实现HiveImpala的中文拼音排序
- Linux安装SmartSVN及破解
- 维珍创始人的10大成功秘诀
- 什么标签用于在表单中构建复选框_以下 ( ) 标签用于在表单中构建复选框 。_IP通信技术答案_学小易找答案...
- 苹果id登陆不上去怎么回事_shopee虾皮台湾站 app怎么登陆不上去,shopee虾皮台湾站app最新版...
- linux定时器原理
- 华为android打开usb调试模式,华为P6 USB调试在哪 如何打开USB调试【详解】
- webp格式以及工具介绍
- shell以分号结尾_linux shell 各种分号,括号使用方法总结
- 暾盛机器人_移动机器人视觉伺服.pdf
- 面试题-redis数据类型
- 数据库 数据目录
- 采集到竞品数据的10个经典方法
- 计算机专业学渣面试,感觉读了计算机专业真的是一条不归路
热门文章
- IIS网站或系统验证码不显示问题——使用了托管的处理程序,但是未安装或未完整安装 ASP.NET...
- 授人以鱼不如授人以渔,UCHome全面大解析培训活动【第三集】
- 如何用CSS画一个三角形
- java中math类方法之数学运算(pow,exp,三角函数,指数)
- Rulo扫地机器人app_扫地机器人怎么选?扫地机器人怎么用
- Golang——HTTP编程请求和响应实现
- 图像水平梯度和竖直梯度代码_Opencv图像处理(三)
- gin context和官方context_Go语言gin框架从入门到精通(3)
- java在线编辑器_微软开源在线代码编辑器——Monaco Editor
- 岗位po是什么意思_面试时,面试官问你有什么优点和缺点?应该如何巧妙的回答?...