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


相关推荐

  • requires php ~7.1 -> your PHP version (7.0.18) does not satisfy that requirement

    requires php ~7.1 -> your PHP version (7.0.18) does not satisfy that requirement

    2021年10月20日
    51
  • mysql 乱码 latin1_mysql 数据库 latin1 导致的乱码

    mysql 乱码 latin1_mysql 数据库 latin1 导致的乱码很多年以前遇到 mysql 的乱码问题 最近又遇到了 mysql 这货 默认的编码是 latin1 例如 latin1 swedish ci 实在不明白为什么是这样 而最近 10 年 主流的编码方式已经是 utf8 mysql 中 最初采用 utf8 generalci 与其匹配 后来逐渐地使用 utf8unicode ci 与其匹配 比较神奇的是 有时候 mysql 数据库已经从 lati

    2026年1月16日
    1
  • 解除华为学生模式的6种方法

    解除华为学生模式的6种方法华为学生模式的6种方法,已经过作者测试。

    2022年5月1日
    2.1K
  • ESET NOD32

    ESET NOD32ESET NOD32是由ESET发明设计的杀毒防毒软件。ESET,于1992年建立,是一个全球性的安全防范软件公司,主要为企业和个人消费者提供服务。其得奖之旗舰产品 NOD32 能针对已知及未知的病毒,间谍软件(SPYWARE)及其它对用户系统带来威胁的程式进行实时的保护。  For Home   ESETNOD32Antivirus11https://download….

    2022年6月22日
    48
  • GBDT算法简介_gbdt算法原理

    GBDT算法简介_gbdt算法原理在网上看到一篇GBDT介绍非常好的文章,GBDT大概是非常好用又非常好用的算法之一了吧(哈哈两个好的意思不一样)        GBDT(Gradient Boosting Decision Tree) 又叫 MART(Multiple Additive Regression Tree),是一种迭代的决策树算法,该算法由多棵决策树组成,所有树的结论累加起来做最终答

    2022年10月12日
    3
  • Java快速入门

    Java快速入门1Java简介太阳计算机系统(中国)有限公司1982年成立2009年被Oracle收购甲骨文股份有限公司1977年成立2013年成为全球第二大软件公司詹姆斯·高斯林(JamesGosling)Java编程语言的共同创始人之一一般公认他为“Java之父”1.1Java发展史20世纪90年代,出现了单片机。1991年,Sun公司成立了Green项目小组,专攻家电产品上的嵌入式应用,开发出了一种称为Oak的面向对象语言。1992年,Oak语言开发成功后,因为缺

    2022年6月5日
    32

发表回复

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

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