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类内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

相关文章

  • Java线程间通讯的几种方法小结

    Java线程间通讯的几种方法小结

    线程通信可以用于控制并发线程的数量,本文主要介绍了Java线程间通讯的几种方法小结,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起学习学习吧
    2024-01-01
  • MyEclipse 2016 CI 4新增BootStrap模板

    MyEclipse 2016 CI 4新增BootStrap模板

    MyEclipse2016是一款全球使用最为广泛的企业级开发环境程序,这篇文章主要介绍了MyEclipse 2016 CI 4新增BootStrap模板的相关资料,非常不错,具有参考借鉴价值,需要的朋友可以参考下
    2016-06-06
  • idea插件篇之java内存分析工具(JProfiler)的使用

    idea插件篇之java内存分析工具(JProfiler)的使用

    这篇文章主要介绍了idea插件篇之java内存分析工具(JProfiler),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2020-09-09
  • docker编写java的jar完整步骤记录

    docker编写java的jar完整步骤记录

    在平常的开发工作中,我们经常需要部署项目,开发测试完成后,最关键的一步就是部署,这篇文章主要介绍了docker编写java的jar的相关资料,文中通过代码介绍的非常详细,需要的朋友可以参考下
    2025-09-09
  • SpringBoot整合DeepSeek技术指南(实际应用场景)

    SpringBoot整合DeepSeek技术指南(实际应用场景)

    这篇文章主要介绍了SpringBoot整合DeepSeek技术指南,本文通过实际应用场景模拟给大家介绍的非常详细,感兴趣的朋友一起看看吧
    2025-04-04
  • Java代码规范与质量检测插件SonarLint的使用

    Java代码规范与质量检测插件SonarLint的使用

    本文主要介绍了Java代码规范与质量检测插件SonarLint的使用,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
    2022-08-08
  • java ThreadGroup的作用及方法详解

    java ThreadGroup的作用及方法详解

    这篇文章主要介绍了java ThreadGroup的作用及方法,具有很好的参考价值,希望对大家有所帮助。如有错误或未考虑完全的地方,望不吝赐教
    2021-10-10
  • Java之泛型在使用过程全解析

    Java之泛型在使用过程全解析

    这篇文章介绍了泛型的基本概念及其在Java中的应用,泛型通过统一类型参数消除了强转问题,广泛应用于集合类(如List、Set、Map)中,确保元素类型一致,文章还详细解释了泛型类、泛型方法、子类继承、类型限制(上限和下限)、泛型擦除以及桥接方法等关键概念
    2025-09-09
  • 带你入门java雪花算法原理

    带你入门java雪花算法原理

    SnowFlake 算法,是 Twitter 开源的分布式 id 生成算法。其核心思想就是:使用一个 64 bit 的 long 型的数字作为全局唯一 id。在分布式系统中的应用十分广泛,且ID 引入了时间戳,基本上保持自增的
    2021-06-06
  • java单链表实现书籍管理系统

    java单链表实现书籍管理系统

    这篇文章主要为大家详细介绍了java单链表实现书籍管理系统,文中示例代码介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们可以参考一下
    2021-11-11

最新评论