MessageDigest用法[通俗易懂]

MessageDigest用法[通俗易懂]为什么要使用MessageDigest?某些金融行业用于进行简单的密码加密。例如:需求某银行对数据库账户取款密码加密。为了保护客户信息的安全,客户取款密码只能客户自己知道,银行方面对此加密,加密后数据保存的数据库。此时可以用MessageDigest进行加密,以及后续其他方案再次加密。MessageDigest是什么?java.security.MessageDigest类…

大家好,又见面了,我是你们的朋友全栈君。

为什么要使用MessageDigest?

某些金融行业用于进行简单的密码加密。例如:需求某银行对数据库账户取款密码加密。为了保护客户信息的安全,客户取款密码只能客户自己知道,银行方面对此加密,加密后数据保存的数据库。此时可以用MessageDigest进行加密,以及后续其他方案再次加密。

MessageDigest 是什么?

java.security.MessageDigest类为应用程序提供信息摘要算法的功能,如 MD5 或 SHA-1或SHA-256 算法。信息摘要是安全的单向哈希函数,它接收任意大小的数据,并输出固定长度的哈希值。

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

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

  • This MessageDigest class provides applications the functionality of a message digest algorithm, such as SHA-1 or SHA-256. Message digests are secure one-way hash functions that take arbitrary-sized data and output a fixed-length hash value.

    A MessageDigest object starts out initialized. The data is processed through it using the update methods. At any point reset can be called to reset the digest. Once all the data to be updated has been updated, one of the digest methods should be called to complete the hash computation.

    The digest method can be called once for a given number of updates. After digest has been called, the MessageDigest object is reset to its initialized state.

代码展示:
import java.io.UnsupportedEncodingException;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MessageDigestDemo extends Thread {
private static final char[] ch = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

public static void run(String str) {
byte[] data = null;
MessageDigest md;
try {
data = str.getBytes("UTF8");
//初始化对象
md = MessageDigest.getInstance("MD5");
//传送要计算的数据更新操作
md.update(data);
//计算的数据生成加密数据
byte[] resultData = md.digest();
//测试查看输出
System.out.println(bytes2HexStr(resultData));
} catch (NoSuchAlgorithmException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (UnsupportedEncodingException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}

static String bytes2HexStr(byte[] paramArrayOfByte) {
StringBuffer localStringBuffer = new StringBuffer(paramArrayOfByte.length * 2);
for (int i = 0; i < paramArrayOfByte.length; i++)
{
localStringBuffer.append(ch[(paramArrayOfByte[i] >>> 4 & 0xF)]);
localStringBuffer.append(ch[(paramArrayOfByte[i] & 0xF)]);
}
return localStringBuffer.toString();
}

public static void main(String[] args) {
String text = "loveuu";
run(text);
}
}

测试输出:

c591f3416f45f8146de0839266594731

总结:

使用中大多用工具类进行封装,使用时直接调用run(String str)方法,用来传递所要加密的字符串。

更多MessageDigest 方法使用详见JDK文档。

刚开始写技术文章,许多问题不完善,敬请指导!

PS:
参考JDK_API文档
参考http://blog.sina.com.cn/s/blog_4f36423201000c1e.html文章


转载于:https://www.cnblogs.com/JackXv/p/9371543.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/157775.html原文链接:https://javaforall.net

(0)
上一篇 2022年7月11日 下午11:36
下一篇 2022年7月11日 下午11:46


相关推荐

  • Java编译时注解自动生成代码[通俗易懂]

    Java编译时注解自动生成代码[通俗易懂]在开始之前,我们首先申明一个非常重要的问题:我们并不讨论那些在运行时(Runtime)通过反射机制运行处理的注解,而是讨论在编译时(Compiletime)处理的注解。注解处理器是一个在javac中的,用来编译时扫描和处理的注解的工具。可以为特定的注解,注册自己的注解处理器。一个注解的注解处理器,以Java代码(或者编译过的字节码)作为输入,生成文件(通常是.java文件)作为输出。可以生成Java代码,这些生成的Java代码是在生成的.java文件中,所以不能修改已经存在的Java类,例如向已有的类中

    2022年5月27日
    284
  • docker环境下部署web_docker环境部署

    docker环境下部署web_docker环境部署概述本文采用rpm包的方式,基于docker的centos7镜像层,构建一个zabbix的环境,其中包括zabbix服务端、mysql数据库、zabbix客户端以及grafana。Dockfilezabbix服务器

    2025年7月8日
    6
  • 《Getting Started with WebRTC》第一章 WebRTC介绍

    《Getting Started with WebRTC》第一章 WebRTC介绍

    2022年1月22日
    478
  • java 无锁队列实现_java无锁队列实现

    java 无锁队列实现_java无锁队列实现对于像应用中多个生产者需要并发发送一些日志信息给远程存储服务器 这些日志信息用于 dubbo 的调用链分析 一种方案是生产者线程将要发送的日志消息存储到队列当中 然后由另一个本地消费线程从队列中获取要发送的日志消息 发送到远程存储服务器 这种业务场景要求要发送的日志消息不影响正常业务的性能 其次允许这种日志消息发送失败 而由于发送者与消费者的并发 因此需要设计一个并发队列 即要性能高 又要保证数据不重

    2026年3月19日
    2
  • 数据库范式判断及分解技巧

    数据库范式判断及分解技巧这个博客就当自己的笔记了 写的不好不对的地方 大家多多指教啦 数据库中的范式是考试中必考的重点 也是应用中比较实用的操作标准 不说废话了 下面将分段来从不同深度开始说 前驱知识补充 函数依赖简单通俗地说就是属性之间是否有确定的关系 比如 学生表 学号 姓名 性别 选修课 成绩 学号函数确定姓名 学号 选修课 函数确定成绩 在不重名情况下 姓名函数确定性别 也可以称为性别函数依赖姓名 记

    2026年3月18日
    3
  • open claw安装在windows wsl中教程

    open claw安装在windows wsl中教程

    2026年3月17日
    2

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号