目录

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算法相关推荐

  1. Windows校验文件哈希hash的两种常用方式

    大家经常都到哪儿去下载软件和应用程序呢?有没想过下载回来的软件.应用程序或资源是否安全呢?在 Windows 10 和 Office 2016 发布当初,很多没权限的朋友都使用第三方网站去下载安装映像 ...

  2. 网页html文档头部声明的两种常用模式

    Html文档头部声明的两种常用模式 第一种,XHTML1.0严格模式,对很多废除的标签不支持,书写要严格遵守W3C的要求,是找虐的好方法: <!DOCTYPE html PUBLIC " ...

  3. Silve37.Silverlight和ASP.NET相互传参的两种常用方式(QueryString,Cookie)

    在本节中将讲述Silverlight和ASP.NET页面的相互传参的两种常用方式:Cookie和QueryString.首先我们新建一个名 为SLConnectASP.NET的Silverlight应 ...

  4. Spring Cloud Config采用Git存储时两种常用的配置策略

    由于Spring Cloud Config默认采用了Git存储,相信很多团队在使用Spring Cloud的配置中心时也会采用这样的策略.即便大家都使用了Git存储,可能还有各种不同的配置方式,本文就 ...

  5. 数据中心两种常用流量模型运用mininet的实现

    为什么80%的码农都做不了架构师?>>>    编者按:在网络性能评估中一个巨大的挑战就是如何生成真实的网络流量,还好可以通过程序来创造人工的网络流量,通过建立测试环境来模拟真实的状 ...

  6. 计算机网络对等模式,计算机网络有两种常用的工作模式,它们是对等模式和客户/服务器模式。QQ聊天属于________模式。...

    计算机网络有两种常用的工作模式,它们是对等模式和客户/服务器模式.QQ聊天属于________模式. 更多相关问题 Maria, Enclosed is the schedule for this y ...

  7. 什么是动态代理?两种常用的动态代理方式

    什么是动态代理? 动态代理就是,在程序运行期,创建目标对象的代理对象,并对目标对象中的方法进行功能性增强的一种技术.在生成代理对象的过程中,目标对象不变,代理对象中的方法是目标对象方法的增强方法.可以 ...

  8. html中img显示图片的两种常用方式

    html中img显示图片的两种常用方式 显示图片,尤其是二维码的时候,大都是自动生成的,所以就需要能够从后台返回字符串,前台浏览器进行解析.好了,下面是这两种方式. 1. <img src=&q ...

  9. R中两种常用并行方法——2. snowfall

    上一篇博客(R中两种常用并行方法--1. parallel)中已经介绍了R中常见的一种并行包:parallel,其有着简单便捷等优势,其实缺点也是非常明显,就是很不稳定.很多时候我们将大量的计算任务挂 ...

最新文章

  1. 目标检测(或分隔)算法Mask R-CNN简介
  2. 循环神经网络 递归神经网络_如何用递归神经网络预测空气污染
  3. Linux中SysRq的使用[zt]
  4. Bootstrap框架的基本使用
  5. 如何计算近似纳什均衡_明明合作可以“共赢”,为什么他会损人不利己?博弈论之纳什均衡...
  6. 如何自行分析定位SAP BSP错误
  7. 说明一项最有成就感的php项目,2020 Github 上 10 个最受欢迎的 PHP 项目
  8. grep命令做永久别名 显示颜色
  9. jquery 监听返回事件
  10. 51单片机串行通信原理
  11. Altium Designer(3)-绘制PCB封装库
  12. html背景图片固定代码
  13. python制作GIF图
  14. 融合泊车占比超过60%,除了德赛西威,还有哪些本土供应商
  15. OpenCV数字图像处理基于C++:灰度变换
  16. 世界十大经典汽车赛道盘点
  17. gromcas 分析NAMD轨迹文件dcd
  18. FreeBSD内核配置文件详解 (转)
  19. 软件开发项目 质量管理的6大关键事项
  20. 计算字符串中子串出现的次数

热门文章

  1. 开发语言特性对比 java python golang c# c++
  2. vue文字换行,js文字换行
  3. Nginx配置域名服务小试牛刀
  4. nginx 配置域名映射到本地IP
  5. emif接口速率问题_EMIF接口与FPGA的互联(转)
  6. 外部存储器接口(External Memory Interface, EMIF)
  7. Geant4在Ubuntu(WSL)中,安装过程详解,附Geant4一键安装脚本
  8. nyoj-30 Go finishing 经典贪心
  9. 软件设计师---设计模式
  10. python带你实现视频采集、自动评论及自动点赞