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)
全栈程序员-站长的头像全栈程序员-站长

相关推荐

  • Java多线程常用面试题(含答案,精心总结整理)

    Java多线程常用面试题(含答案,精心总结整理)Java并发编程问题是面试过程中很容易遇到的问题,提前准备是解决问题的最好办法,将试题总结起来,时常查看会有奇效。现在有T1、T2、T3三个线程,你怎样保证T2在T1执行完后执行,T3在T2执行完后执行?这个线程问题通常会在第一轮或电话面试阶段被问到,目的是检测你对”join”方法是否熟悉。这个多线程问题比较简单,可以用join方法实现。核心:thread.Jo

    2022年7月15日
  • BufferedWriter输出流的使用「建议收藏」

    BufferedWriter输出流的使用「建议收藏」packagecom.lzxa.analyze.common;importjava.io.*;importjava.text.DateFormat;importjava.text.SimpleDateFormat;importjava.util.Date;/***输入流*/publicclassIOBufferedWriter{static…

    2022年6月1日
  • servlet与jsp区别_servlet和class的区别

    servlet与jsp区别_servlet和class的区别JSP和Servlet都是与使用Java构建基于Web的应用程序有关的重要概念。基本上,Servlet是Java中HTML,而JSP是HTML中的Java。任何典型的Web开发面试都可能有几个基于JSP和Servlet的Java面试问题。尽管JSP和Servlet的主要目的是相同的,但是两者之间还是有一些重要的区别。在深入研究两个Java概念之间的差异之前,让我们首先对它们有一…

    2022年4月20日
  • int使用规则_single是什么数据类型

    int使用规则_single是什么数据类型先说结论吧,方便快速查询验证。总结区别int类型大小为8字节int8类型大小为1字节int16类型大小为2字节int32类型大小为4字节int64类型大小为8字节go语言中的int的大小是和操作系统位数相关的,如果是32位操作系统,int类型的大小就是4字节;如果是64位操作系统,int类型的大小就是8个字节取值范围int8:-128~127int16:-32768~32767int32:-2147483648~214

    2022年9月19日
  • redis 过期删除策略(redis过期机制)

    过期删除策略redis可以对key的通用设置中,可以设置key的过期时间及ttl如果单纯的再client中进行命令测试的话,会发现了当时间到时间后再去获取该key会显示nil那么一个key过期了,那么它实际是在什么时候删除的呢?当然这个删除也不是简单的到期了就直接被删除了redis中对于过期键的过期删除策略定时删除惰性删除定期删除定时删除它会在设置键的过期时间的同时,创建一个定时器,当键到了过期时间,定时器会立即对键进行删除。这个策略能够保证过期键的尽快删除,快速释放内存空间

    2022年4月10日
  • TCP拥塞控制机制(附面试题)

    TCP拥塞控制机制(附面试题)产生的原因∑对资源的需求&amp;amp;amp;gt;可用资源∑对资源的需求&amp;amp;amp;gt;可用资源\sum_{}^{}对资源的需求&amp;amp;gt;可用资源注意单纯的增加网络资源无法解决问题例如:把结点的存储空间扩大,更换更高速率的链路,提高结点处理机的运算速度,不仅不能解决问题,而且可能使网络性能更坏。原因:网络拥塞是许多因素引起的,单纯的解决一个可能会使上述情况得到一些缓解,但是会把拥塞转移到其…

    2022年6月24日

发表回复

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

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