两种常用的哈希算法与Hmac算法
目录
0.概述:
1、MD5算法
1.1 步骤
1.2代码实现
2 、SHA-1算法
2.1 步骤
2.2 代码实现:
3 、Hmac算法
3.1 步骤:
3.2 代码实现:
0.概述:
哈希算法又称摘要算法,它的作用是:对任意一组输入数据进行计算,得到一个固定长度的输出摘要。哈希算法的目的:为了验证原始数据是否被篡改。
最主要的特点是:
相同的输入一定得到相同的输出
不同的输入大概率得到不同的输出
1、MD5算法
1.1 步骤
获取基于MD5加密算法的工具对象
更新原始数据
获取加密后的结果
将字节数组形式的结果转换成字符串
1.2代码实现
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
/** MD5加密密码,规定长度为32,并且拿到他的字符串形式*/
public class Test02 {public static void main(String[] args) {String password = "wbjxxmynhmyzgq";try {MessageDigest digest = MessageDigest.getInstance("MD5");digest.update(password.getBytes());byte[] digestByteArray = digest.digest();//加密StringBuilder result = new StringBuilder();for(byte b : digestByteArray) {result.append(String.format("%02x", b));}System.out.println(result.toString());} catch (NoSuchAlgorithmException e) {e.printStackTrace();}}
}
2 、SHA-1算法
2.1 步骤
获取基于MD5加密算法的工具对象(“SHA-1”)
更新原始数据
获取加密后的结果
将字节数组形式的结果转换成字符串
2.2 代码实现:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.Arrays;
import java.util.UUID;
/** SHA-1哈希算法*/
public class Test01 {public static void main(String[] args) {String password = "sdfsdf";//加盐String salt = UUID.randomUUID().toString().substring(0, 5);System.out.println(salt);try {//SHA-1哈希算法MessageDigest digest = MessageDigest.getInstance("SHA-1");digest.update(password.getBytes());digest.update(salt.getBytes());byte[] digestArray = digest.digest();StringBuilder resultStr = new StringBuilder();for(byte b : digestArray){resultStr.append(String.format("%02x", b));}System.out.println(resultStr.toString());} catch (NoSuchAlgorithmException e) {e.printStackTrace();}}
}
3 、Hmac算法
3.1 步骤:
生成秘钥(创建秘钥生成器对象)
利用秘钥生成器生成秘钥
生成秘钥Key的字节数组
可以将秘钥字节数组转换成字符串
使用秘钥、进行加密(获取算法对象)
初始化
更新原始内容
加密,生成字节数组形式的加密结果
将加密结果转换成字符串
3.2 代码实现:
public class Test01 {public static void main(String[] args) {try{//1 获取秘钥结果String password = "nhmyzgq";//秘钥生成器KeyGenerator keyGen = KeyGenerator.getInstance("HmacMD5");//生成秘钥SecretKey key = keyGen.generateKey();//生成秘钥数组byte[] keyByteArray = key.getEncoded();StringBuilder sb = StringBuilder();for(byte b:keyByteArray) {sb.append(String.format("%02x", b));}System.out.println("打印秘钥内容:" + sb);//2使用秘钥,进行加密//获取算法对象Mac mac = Mac.getInstance("HmacMD5");//初始化mac.init(key);mac.update(password.getBytes());//加密(返回字节数组)byte[] resultByteArray = mac.doFinal();//把字节数组转换成字符串StringBuilder resultStr = new StringBuilder();for(byte b : resultByteArray){resultStr.append(String.format("%02", b));}System.out.println(resultStr);}catch(NoSuchAlgorithmException e){e.printStackTrace();}}
}
恢复秘钥的代码实现:
public class Test01 {public static void main(String[] args) {try{//1 获取秘钥结果String password = "nhmyzgq";//秘钥生成器KeyGenerator keyGen = KeyGenerator.getInstance("HmacMD5");//生成秘钥SecretKey key = keyGen.generateKey();//生成秘钥数组byte[] keyByteArray = key.getEncoded();StringBuilder sb = StringBuilder();for(byte b:keyByteArray) {sb.append(String.format("%02x", b));}System.out.println("打印秘钥内容:" + sb);//2使用秘钥,进行加密//获取算法对象Mac mac = Mac.getInstance("HmacMD5");//初始化mac.init(key);mac.update(password.getBytes());//加密(返回字节数组)byte[] resultByteArray = mac.doFinal();//把字节数组转换成字符串StringBuilder resultStr = new StringBuilder();for(byte b : resultByteArray){resultStr.append(String.format("%02", b));}System.out.println(resultStr);}catch(NoSuchAlgorithmException e){e.printStackTrace();}}
}
两种常用的哈希算法与Hmac算法相关推荐
- Windows校验文件哈希hash的两种常用方式
大家经常都到哪儿去下载软件和应用程序呢?有没想过下载回来的软件.应用程序或资源是否安全呢?在 Windows 10 和 Office 2016 发布当初,很多没权限的朋友都使用第三方网站去下载安装映像 ...
- 网页html文档头部声明的两种常用模式
Html文档头部声明的两种常用模式 第一种,XHTML1.0严格模式,对很多废除的标签不支持,书写要严格遵守W3C的要求,是找虐的好方法: <!DOCTYPE html PUBLIC " ...
- Silve37.Silverlight和ASP.NET相互传参的两种常用方式(QueryString,Cookie)
在本节中将讲述Silverlight和ASP.NET页面的相互传参的两种常用方式:Cookie和QueryString.首先我们新建一个名 为SLConnectASP.NET的Silverlight应 ...
- Spring Cloud Config采用Git存储时两种常用的配置策略
由于Spring Cloud Config默认采用了Git存储,相信很多团队在使用Spring Cloud的配置中心时也会采用这样的策略.即便大家都使用了Git存储,可能还有各种不同的配置方式,本文就 ...
- 数据中心两种常用流量模型运用mininet的实现
为什么80%的码农都做不了架构师?>>> 编者按:在网络性能评估中一个巨大的挑战就是如何生成真实的网络流量,还好可以通过程序来创造人工的网络流量,通过建立测试环境来模拟真实的状 ...
- 计算机网络对等模式,计算机网络有两种常用的工作模式,它们是对等模式和客户/服务器模式。QQ聊天属于________模式。...
计算机网络有两种常用的工作模式,它们是对等模式和客户/服务器模式.QQ聊天属于________模式. 更多相关问题 Maria, Enclosed is the schedule for this y ...
- 什么是动态代理?两种常用的动态代理方式
什么是动态代理? 动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术.在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法.可以 ...
- html中img显示图片的两种常用方式
html中img显示图片的两种常用方式 显示图片,尤其是二维码的时候,大都是自动生成的,所以就需要能够从后台返回字符串,前台浏览器进行解析.好了,下面是这两种方式. 1. <img src=&q ...
- R中两种常用并行方法——2. snowfall
上一篇博客(R中两种常用并行方法--1. parallel)中已经介绍了R中常见的一种并行包:parallel,其有着简单便捷等优势,其实缺点也是非常明显,就是很不稳定.很多时候我们将大量的计算任务挂 ...
最新文章
- 目标检测(或分隔)算法Mask R-CNN简介
- 循环神经网络 递归神经网络_如何用递归神经网络预测空气污染
- Linux中SysRq的使用[zt]
- Bootstrap框架的基本使用
- 如何计算近似纳什均衡_明明合作可以“共赢”,为什么他会损人不利己?博弈论之纳什均衡...
- 如何自行分析定位SAP BSP错误
- 说明一项最有成就感的php项目,2020 Github 上 10 个最受欢迎的 PHP 项目
- grep命令做永久别名 显示颜色
- jquery 监听返回事件
- 51单片机串行通信原理
- Altium Designer(3)-绘制PCB封装库
- html背景图片固定代码
- python制作GIF图
- 融合泊车占比超过60%,除了德赛西威,还有哪些本土供应商
- OpenCV数字图像处理基于C++:灰度变换
- 世界十大经典汽车赛道盘点
- gromcas 分析NAMD轨迹文件dcd
- FreeBSD内核配置文件详解 (转)
- 软件开发项目 质量管理的6大关键事项
- 计算字符串中子串出现的次数