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 pointreset
can be called to reset the digest. Once all the data to be updated has been updated, one of thedigest
methods should be called to complete the hash computation. Thedigest
method can be called once for a given number of updates. Afterdigest
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.cn/157776.html原文链接:https://javaforall.cn
- 细说ReactiveCocoa的冷信号与热信号系列(1)
- 【美团技术团队博客】前端组件化开发实践
- Spring中Bean
- 跟Google学写代码--Chromium/base--windows_version源码学习及应用
- 一步步教你弹性框架-下篇
- R语言与机器学习(分类算法)朴素贝叶斯算法
- 【美团技术团队博客】RACSignal的Subscription深入分析
- 谈谈个人网站的建立(八)—— 缓存的使用
- 【编程基础】System.arraycopy()和 Arrays.copyOf()
- 移动端 模拟手机联系人触摸A~Z导航
- 谈谈个人网站的建立(七)—— 那些建站必备的插件
- 【美团技术团队博客】Linux资源管理之cgroups简介
- 谈谈个人网站的建立(六)—— 数据库同步
- Javascript解析机制 执行机制
- JavaScript 教程
- JavaScript 编辑工具
- JavaScript 与HTML
- JavaScript 与Java
- JavaScript 数据结构
- JavaScript 基本数据类型
- JavaScript 特殊数据类型
- JavaScript 运算符
- JavaScript typeof 运算符
- JavaScript 表达式
- JavaScript 类型转换
- JavaScript 基本语法
- JavaScript 注释
- Javascript 基本处理流程
- Javascript 选择结构
- Javascript if 语句
- Javascript if 语句的嵌套
- Javascript switch 语句
- Javascript 循环结构
- Javascript 循环结构实例
- Javascript 跳转语句
- Javascript 控制语句总结
- Javascript 函数介绍
- Javascript 函数的定义
- Javascript 函数调用
- Javascript 几种特殊的函数
- JavaScript 内置函数简介
- Javascript eval() 函数
- Javascript isFinite() 函数
- Javascript isNaN() 函数
- parseInt() 与 parseFloat()
- escape() 与 unescape()
- Javascript 字符串介绍
- Javascript length属性
- javascript 字符串函数
- Javascript 日期对象简介
- Javascript 日期对象用途
- Date 对象属性和方法
- Javascript 数组是什么
- Javascript 创建数组
- Javascript 数组赋值与取值
- Javascript 数组属性和方法
- protobuf 语法 与 protocol-buffers 的使用
- 小程序 - 简单实现mixin功能
- 记录一些小技巧-CSS篇
- 记录一些小技巧-JS篇
- 初次在Vue项目使用TypeScript,需要做什么
- VScode - 10个提高工作效率的快捷键
- Vue - 自定义组件双向绑定
- 解决 [Element Warn][Form]model is required for validate to work!
- 编写TypeScript工具类型,你需要知道的知识
- 微信小程序8种数据通信的方式
- 前端手写代码原理实现
- JavaScript 进制转换&位运算,了解一下?
- 10个实用的工具函数
- 小程序scroll-view点击项自动居中
- 维护你的请求队列,处理token异常