Java中的信息摘要算法MessageDigest类用法详解

 更新时间:2024年01月16日 09:01:29   作者:jiayoudangdang  
这篇文章主要介绍了Java中的信息摘要算法MessageDigest类用法详解,java.security.MessageDigest类为应用程序提供信息摘要算法的功能,如MD5或SHA-1或SHA-256算法,信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值,需要的朋友可以参考下

MessageDigest 是什么?

java.security.MessageDigest类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA-1或SHA-256 算法。

信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。

MessageDigest 对象调用getInstance初始化,使用 update 方法处理数据。任何时候都可以调用 reset 方法重置摘要。一旦所有需要更新的数据都已经被更新了,应该调用 digest 方法之一完成哈希计算。

对于给定数量的更新数据,digest 方法只能被调用一次。在调用 digest 之后,MessageDigest 对象被重新设置成其初始状态。

常用的方法

两种getInstance

  • public static MessageDigest getInstance(String algorithm) throws NoSuchAlgorithmException
  • 返回实现指定摘要算法的 MessageDigest 对象。
  • algorithm - 所请求算法的名称
  • public static MessageDigest getInstance(String algorithm,  String provider) throws NoSuchAlgorithmException, NoSuchProviderException
  • 返回实现指定摘要算法的 MessageDigest 对象。
  • algorithm - 所请求算法的名称
  • provider - 提供者的名称。

update

  • public void update(byte[] input)
  • 使用指定的 byte 数组更新摘要。

digest

  • public byte[] digest()
  • 通过执行诸如填充之类的最终操作完成哈希计算。在调用此方法之后,摘要被重置。

isEqual

  • public static boolean isEqual(byte[] digesta, byte[] digestb)
  • 比较两个摘要的相等性。做简单的字节比较。 
  • 注意:Provider可以通过 java.security.Security.getProviders()
  • 方法获取已注册提供者列表。比较常用的有“SUN”

SUN提供的常用的算法名称有

  • MD2
  • MD5
  • SHA-1
  • SHA-256
  • SHA-384
  • SHA-512

使用的例子

static byte[] md5(String key) {
	MessageDigest md;
	try {
		// 返回实现指定摘要算法的 MessageDigest 对象
		md = MessageDigest.getInstance("MD5");
		// getBytes(String charsetName): 使用指定的字符集将字符串编码为 byte 序列,并将结果存储到一个新的 byte 数组中
		byte[] bytes = key.getBytes(StandardCharsets.UTF_8);
		// 使用指定的 byte 数组更新摘要
		md.update(bytes);
	} catch (NoSuchAlgorithmException e) { //NoSuchAlgorithmException: 当请求特定的加密算法但在环境中不可用时,将抛出此异常
		// 抛出非法状态异常
		throw new IllegalStateException(e.getMessage(), e);
	}
	// 通过执行诸如填充之类的最终操作完成哈希计算。在调用此方法之后,摘要被重置
	return md.digest();
}

到此这篇关于Java中的信息摘要算法MessageDigest类用法详解的文章就介绍到这了,更多相关信息摘要算法MessageDigest类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • idea中javaweb的jsp页面图片加载不出来问题及解决

    idea中javaweb的jsp页面图片加载不出来问题及解决

    这篇文章主要介绍了idea中javaweb的jsp页面图片加载不出来问题及解决方案,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2023-07-07
  • Spring 数据库连接池(JDBC)详解

    Spring 数据库连接池(JDBC)详解

    本篇文章主要介绍了基于Spring的JDBC基本框架搭建;基于Spring的JDBC增删改查;读取配置文件中的数据等,具有很好的参考价值。下面跟着小编一起来看下吧
    2017-05-05
  • 自己写的java日志类和方法代码分享

    自己写的java日志类和方法代码分享

    这篇文章主要介绍了一个自己写的java日志类和方法,下面把代码分享给大家
    2014-01-01
  • log4j2的异步使用及添加自定义参数方式

    log4j2的异步使用及添加自定义参数方式

    这篇文章主要介绍了log4j2的异步使用及添加自定义参数方式,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-12-12
  • 简单了解springboot的jar包部署步骤

    简单了解springboot的jar包部署步骤

    这篇文章主要介绍了springboot的jar包部署步骤解析,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友可以参考下
    2019-10-10
  • 论java如何通过反射获得方法真实参数名及扩展研究

    论java如何通过反射获得方法真实参数名及扩展研究

    这篇文章主要为大家介绍了java如何通过反射获得方法的真实参数名以及扩展研究,有需要的朋友可以借鉴参考下,希望能够有所帮助祝大家多多进步早日升职加薪
    2022-01-01
  • 详解如何使用MyBatis简化JDBC开发

    详解如何使用MyBatis简化JDBC开发

    JavaEE 企业级 Java 项目中的经典三层架构为表现层,业务层和持久层.MyBatis 对 JDBC 代码进行了封装,作为一款优秀的持久层框架,专门用于简化JDBC开发.本文主要介绍一下如何使用MyBatis简化JDBC开发,需要的可以参考一下
    2023-01-01
  • Java技术长久占居主要地位的12个原因

    Java技术长久占居主要地位的12个原因

    这篇文章主要为大家详细介绍了12个Java长久占居主要地位的原因,感兴趣的小伙伴们可以参考一下
    2016-07-07
  • java中雪花算法时钟回拨问题解决

    java中雪花算法时钟回拨问题解决

    本文介绍了分布式系统中使用雪花算法生成唯一ID时可能遇到的时钟回拨问题,以及解决这个问题的几种方法,包括等待机制、扩展位、预留时间戳或逻辑时钟等,感兴趣的可以了解一下
    2024-10-10
  • 手写mybatis完整sql插件问题及实现思路

    手写mybatis完整sql插件问题及实现思路

    大家在使用mybatis的过程中,mysql日志功能一般不会直接放到数据库中执行的,今天小编重点给大家分享手写mybatis完整sql插件问题及实现思路,对mybatis完整sql插件相关知识感兴趣的朋友一起看看吧
    2021-05-05

最新评论