MessageDigest

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

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

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

举个简单的md5加密的例子:

package com.company;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

public class MessageDigestTest {

public static void main(String[] args) throws NoSuchAlgorithmException {

String source = "123123";

String md5Str = getMd5(source);

System.out.println(md5Str);

}

/**

* 通过md5进行加密

* @param source 要加密的数据

* @return

* @throws NoSuchAlgorithmException

*/

private static String getMd5(String source) throws NoSuchAlgorithmException {

//1.获取MessageDigest对象

MessageDigest digest = MessageDigest.getInstance("md5");

//2.执行加密操作

byte[] bytes = source.getBytes();

//在MD5算法这,得到的目标字节数组的特点:长度固定为16

byte[] targetBytes = digest.digest(bytes);

//3.声明字符数组

char [] characters = new char[]{'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};

//4.遍历targetBytes

StringBuilder builder = new StringBuilder();

for (byte b : targetBytes) {

//5.取出b的高四位的值

//先把高四位通过右移操作拽到低四位

int high = (b >> 4) & 15;

//6.取出b的低四位的值

int low = b & 15;

//7.以high为下标从characters中取出对应的十六进制字符

char highChar = characters[high];

//8.以low为下标从characters中取出对应的十六进制字符

char lowChar = characters[low];

builder.append(highChar).append(lowChar);

}

return builder.toString();

}

}

测试结果:

4297F44B13955235245B2497399D7A93

封装成工具类:

package com.company;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

public class MD5Tool {

private static ThreadLocal md5ToolThreadLocal = new ThreadLocal<>();

private MD5Tool() {

}

/**

* 获取一个MD5工具实例

*/

public static MD5Tool getInstance() {

if (md5ToolThreadLocal.get() == null) {

md5ToolThreadLocal.set(new MD5Tool());

}

return md5ToolThreadLocal.get();

}

/**

* 通过md5进行加密

*

* @param source 要加密的数据

* @return

* @throws NoSuchAlgorithmException

*/

public String getMd5(String source) throws NoSuchAlgorithmException {

//1.获取MessageDigest对象

MessageDigest digest = MessageDigest.getInstance("md5");

//2.执行加密操作

byte[] bytes = source.getBytes();

//在MD5算法这,得到的目标字节数组的特点:长度固定为16

byte[] targetBytes = digest.digest(bytes);

//3.声明字符数组

char[] characters = new char[]{'0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};

//4.遍历targetBytes

StringBuilder builder = new StringBuilder();

for (byte b : targetBytes) {

//5.取出b的高四位的值

//先把高四位通过右移操作拽到低四位

int high = (b >> 4) & 15;

//6.取出b的低四位的值

int low = b & 15;

//7.以high为下标从characters中取出对应的十六进制字符

char highChar = characters[high];

//8.以low为下标从characters中取出对应的十六进制字符

char lowChar = characters[low];

builder.append(highChar).append(lowChar);

}

return builder.toString();

}

}

到此这篇关于Java中MessageDigest来实现数据加密的方法的文章就介绍到这了,更多相关MessageDigest 数据加密内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

messagedigest 图片加密_Java中MessageDigest来实现数据加密的方法相关推荐

  1. java 图片加密_java 对视频和图片进行加密解密[转]

    是时候回到文件加密与解密的具体实现这个主题上来了.后续的举例均采用图片(包括GIF动画)类型,而其他类型资源的实现原理相同,就不一一给出了.首先来看对一幅JPG类型图片进行异或加密的Java实现,由于 ...

  2. java怎么将加载图片消除_Java中加载图片的方法

    Java中添加图片,我知道有两种方法 用new ImageIcon("地址")函数,将图片放到JLabel中,然后把JLabel放到需要的地方就可以了 ImageIcon bg=n ...

  3. java shiro盐值加密_java中spring-shiro实现密码的MD5盐值加密

    看了网上很多教程,都提到有配置spring shiro的密码加密方式,甚至给出了自定义的Class来实现.却很少有通过配置来解决的. 密码的盐值加密方式应该是非常通用的,也可以算是基础吧.按理说spr ...

  4. java 8位随机数_JAVA中生成指定位数随机数的方法总结

    JAVA中生成指定位数随机数的方法很多,下面列举几种比较常用的方法. 方法一.通过Math类 1 public static String getRandom1(intlen) {2 int rs = ...

  5. java的flush方法_Java中的BufferedWriter flush()方法及示例

    Java中buffered writer类的flush()方法用于刷新缓冲的writer流中的字符.语法:公共void flush()指定者:此方法由Flushable接口的flush()方法指定.重 ...

  6. java 不定参数方法_java中不定长参数的使用方法

    java中不定长参数的使用方法 不定长参数方法的语法如下:返回值 方法名(参数类型...参数名称) 在参数列表中使用"..."形式定义不定长参数,其实这个不定长参数a就是一个数组, ...

  7. java中保留小数位_Java中保留两位小数的方法

    Java中保留4位小数的方法: import java.math.BigDecimal; import java.text.DecimalFormat; import java.text.Number ...

  8. java定义数组_java中数组的三种定义方式_java中数组的定义及使用方法(推荐)...

    java中数组的三种定义方式 java中,数组是一种很常用的工具,今天我们来说说数组怎么定义 [java] view plain copy /** * 数组的三种定义方法 * 1.数组类型[] 数组名 ...

  9. java中使用配置文件_Java中使用Properties配置文件的简单方法

    Java中使用Properties配置文件的简单方法 properties Properties文件是java中的一种配置文件,文件后缀为".properties",文件的内容格式 ...

  10. java 终止方法_Java中终止线程的三种方法

    Java中终止线程的三种方法 Thread.stop, Thread.suspend, Thread.resume 和Runtime.runFinalizersOnExit 这些终止线程运行的方法已经 ...

最新文章

  1. 11.24杭州沙龙预告:数据化经营,智能化决策
  2. Compound Words UVA - 10391(c++用法中substr函数用法+map实现)
  3. Dropbox推独立应用,公司估值已达100亿美元
  4. SQL ORDER BY Clause
  5. 舞台灯恒流芯片 无频闪无噪音 多路共阳 调光深度0.1% 方案分享
  6. 2018你那计算机考试新题型,2018考研新题型考察点和解题步骤
  7. Windows7下无法安装Oracle11.1.0问题
  8. Linux系统安装oracle时,orainstRoot.sh,root.sh脚本的作用。
  9. 测试先知和启发式方法
  10. 计算机常用英语词汇及读音,e发音的单词有哪些
  11. ps软件怎么测试性能,怎么用ps测试电脑性能 设计师要知道
  12. 液压与气压传动原理及实验装置,QY-QD11
  13. 对Kindle进行可用性研究
  14. 【python 监控报警】python自动发微信监控报警
  15. springboo集成axis2实现webservice服务
  16. C语言数据的表现形式及其运算
  17. 咋把计算机程序固定到任务栏中,win10我的电脑固定到任务栏如何操作_win10怎么把我的电脑放到任务栏...
  18. 反向代理-- WEB服务的加速器[转]
  19. 唐宇迪之tensorflow学习笔记项目实战(LSTM情感分析)
  20. 一个关于概率的问题的思考

热门文章

  1. leach算法 matlab,求助LEACH的MATLAB仿真代码
  2. 微信公众号前端html,微信公众号开发(前端)
  3. 华为网络技术大赛笔记——数据库基础原理
  4. outlook搜索栏不见了_回忆了一下Foxmail内置的全文搜索那点事,于是有了此文
  5. 2021第十四届“认证杯”数学建模网络挑战赛C题
  6. 湘西州2021年高考成绩查询,2021年湘西高考状元名单公布,湘西文理科状元是谁多少分...
  7. SAP Serial Number
  8. Activiti 任务的签收与委托
  9. 《麦肯锡方法》第1章建立解决方案-思维导图
  10. 咸鱼Maya笔记—Maya 绘制多边形