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<MD5Tool> 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();
} }

MessageDigest来实现数据加密的更多相关文章

  1. 转 MessageDigest来实现数据加密

    转自 https://www.cnblogs.com/androidsuperman/p/10296668.html MessageDigest MessageDigest 类为应用程序提供信息摘要算 ...

  2. MessageDigest

    转: 我们知道,编程中数据的传输,保存,为了考虑安全性的问题,需要将数据进行加密.我们拿数据库做例子.如果一个用户注册系统的数据库,没有对用户的信息进 行保存,如,我去页面注册,输入"Vic ...

  3. Android数据加密之SHA安全散列算法

    前言: 对于SHA安全散列算法,以前没怎么使用过,仅仅是停留在听说过的阶段,今天在看图片缓存框架Glide源码时发现其缓存的Key采用的不是MD5加密算法,而是SHA-256加密算法,这才勾起了我的好 ...

  4. Android数据加密之MD5加密

    前言: 项目中无论是密码的存储或者说判断文件是否是同一文件,都会用到MD5算法,今天来总结一下MD5加密算法. 什么是MD5加密? MD5英文全称“Message-Digest Algorithm 5 ...

  5. 【Java EE 学习 70 上】【数据采集系统第二天】【数据加密处理】【登陆验证】【登陆拦截器】【新建调查】【查询调查】

    一.数据加密处理 这里使用MD5加密处理,使用java中自带加密工具类MessageDigest. 该类有一个方法digest,该方法输入参数是一个字符串返回值是一个长度为16的字节数组.最关键的是需 ...

  6. Android数据加密解密

    最近项目在维护过程中,估计这一周都会没有什么事情做了.于是开始打量自己做完的这个项目,项目在展示方面乏善可陈,然后仔细的想了想,这个项目的亮点无非就在数据加密和解密这一块了.因为是银行的项目,所以对数 ...

  7. Android数据加密概述及多种加密方式 聊天记录及账户加密 提供高质量的数据保护

    Android数据加密概述及多种加密方式 聊天记录及账户加密 提供高质量的数据保护 数据加密又称password学,它是一门历史悠久的技术,指通过加密算法和加密密钥将明文转变为密文.而解密则是通过解密 ...

  8. 转:MD5(Message-Digest Algorithm 一种哈希算法)

    什么是MD5算法 MD5讯息摘要演算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码杂凑函数,可以产生出一个128位元(16位元组)的散列值(hash val ...

  9. java中的数据加密

    记录 一.java中的数据加密 Java提供的安全模型和API 加密基础知识 使用JAVA实现加密 二.Java提供的安全模型和API 2.1.Java语言本身的安全性 自动内存管理:对于生成的对象在 ...

随机推荐

  1. 03 测试Hadoop hdfs 上传 与 mr

    1.随便在哪个目录新增一个文档.内容随便输入 mkdir words 2.在hdfs 中新建文件输入目录 ./hdfs dfs -mkdir /test 3.把新建的文档 (/home/hadoop/ ...

  2. ELK日志系统+x-pack安全验证

    根据之前已经搭好的ELK系统,现在加一个x-pack插件上去,不然谁拿到ip和端口都可以访问elasticsearch和kibana. 要的效果如下:打开kibana界面的时候要让其输入用户名密码才能 ...

  3. 数据库及ORM

    数据库概念 关系数据库编程 ORM编程

  4. CSS实现元素水平垂直居中

    我们知道,实现元素的水平居中比较简单,在设置了宽度后,设置左右margin为auto就可以. 但是如何设置元素垂直居中呢? 当然,对于单行的文字,可以通过设置line-height来解决, 可以对于一 ...

  5. VS Code & MacOS & Zsh

    VS Code & MacOS & Zsh https://code.visualstudio.com/docs/setup/mac solution OK bug $ cat .zs ...

  6. SpringBoot之修改单个文件后立刻生效

    问题: 在使用SpringBoot进行开发时,如果修改了某个文件比如前端页面html,不能立刻起效. 解决: 在idea中打开修改后的文件,使用快捷键Ctrl+Shift+F9 进行重新编译,然后刷新 ...

  7. 为什么int型最大的数是2147483647

    32位的电脑中,用二进制表示,最大的就是32个1,用十进制表示为2^32-1,大概40多亿(4294967295) 对于有符号的,第一位用作表示正负(0,1),最大的就是31个1,用十进制表示为2^3 ...

  8. java开发支付宝支付详细流程_demo的运行

    首先我要吐槽一下支付宝的开放平台简直就是一个迷宫,赞同的顶一下,下面我把要下载的地址给贴出来要不真不好找: 一.准备工作 1.签名工具下载 https://docs.open.alipay.com/2 ...

  9. Express学习(2) ------ 中间件

    TJ Holowaychuck 将 “中间件”描述为易于挂载和调用的模块,可以“无序”使用,并有利于应用的快速开发. 1, 中间件是一个模块.在js中,模块意味着函数,所以中间件是一个函数.那么这个函 ...

  10. moogodb 安装及简单介绍

    1,安装Moogodb 因为是windows 64位操作系统,直接到官网上下载.msi文件,下载完成后点击安装,点击同意协议之后,出现下面的对话框, Choose Setup Type, 就是选择安装 ...