Java中的MD5加密详解

一、MD5加密简介

MD5(Message Digest Algorithm 5,信息摘要算法5)是一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5不是加密算法,因为其不可逆,所以更多的被称为摘要算法或散列算法。尽管MD5被广泛应用,但近年来MD5的安全性已被严重质疑,因为其存在碰撞攻击的风险。然而,MD5仍然在某些场合(如生成唯一的标识符、创建数字签名等)具有一定的实用价值。

二、Java实现MD5加密

  1. 常用工具类DigestUtils.md5DigestAsHex方法来实现MD5散列的示例代码:
import org.springframework.util.DigestUtils;  public class MD5Example {  public static void main(String[] args) {  String originalString = "Hello, World!";  System.out.println("Original String: " + originalString);  System.out.println("MD5 hash: " + md5Hash(originalString));  }  public static String md5Hash(String input) {  // 使用DigestUtils直接获取MD5的16进制表示  return DigestUtils.md5DigestAsHex(input.getBytes());  }  
}

在这个示例中,我们直接调用了DigestUtils.md5DigestAsHex方法,它接收一个字节数组作为参数,并返回该字节数组的MD5散列值的16进制表示。我们首先将输入字符串转换为字节数组,然后传递给该方法。最终,我们将得到的16进制字符串打印出来作为MD5哈希值。

  1. 在Java中,我们可以使用java.security.MessageDigest类来实现MD5加密。下面是一个简单的示例代码:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;public class MD5Example {public static void main(String[] args) {String originalString = "Hello, World!";System.out.println("Original String: " + originalString);System.out.println("MD5 hash: " + getMD5Hash(originalString));}public static String getMD5Hash(String input) {try {// 获取MessageDigest实例,并指定MD5算法MessageDigest md = MessageDigest.getInstance("MD5");// 计算输入字符串的字节数组的摘要byte[] messageDigest = md.digest(input.getBytes());// 将摘要转换为16进制字符串StringBuilder hexString = new StringBuilder();for (byte b : messageDigest) {hexString.append(String.format("%02x", b));}return hexString.toString();} catch (NoSuchAlgorithmException e) {throw new RuntimeException(e);}}
}

在这个示例中,我们首先创建了一个MessageDigest实例,并指定了MD5算法。然后,我们计算输入字符串的字节数组的摘要,并将摘要转换为16进制字符串。注意,在计算摘要时,我们需要将输入字符串转换为字节数组。最后,我们将16进制字符串作为MD5哈希值返回。

三、注意事项

  1. MD5已被证明存在安全隐患,不建议用于安全敏感的场合,如密码存储。在这些场合,建议使用更安全的哈希算法,如SHA-256。
  2. 在处理大量数据时,可以考虑使用流式API(如DigestInputStream)来提高性能。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/589397.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Qt学生信息管理系统(Qt+DataBase)

项目简介 一个简单的学生管理系统,适合初学者 主要知识点: Qt如何进行数据库连接?(本项目使用的是SQLite3,也可以根据需要自行更改数据库类型,或者增加一个选择数据库的页面(源代码基础上拓展…

开关电源反馈环路重要参数设计,PC817和TL431实例计算和取值详解

author:小高霸气 data:2021.04.16 下面介绍开关电源重要的反馈电路PC817和TL431设计和应用。 在开关电源当中,对稳压反馈电路的设计通常会使用TL431和PC817来配合使用。在TOP 及3842等单端反激电路中的反馈电路很多都采用TL431和PC817作为参考、隔离、取…

【MyBatis】操作数据库——入门

文章目录 为什么要学习MyBatis什么是MyBatisMyBatis 入门创建带有MyBatis框架的SpringBoot项目数据准备在配置文件中配置数据库相关信息实现持久层代码单元测试 为什么要学习MyBatis 前面我们肯定多多少少学过 sql 语言,sql 语言是一种操作数据库的一类语言&#x…

https证书配置过程

相关网址: FreeSSL首页 - FreeSSL.cn一个提供免费HTTPS证书申请的网站 ACME v2证书自动化快速入门 acme.sh简单教程-CSDN博客

2012 关闭Windows Defender

使用“Win R”组合键打开运行窗口,输入“gpedit.msc”命令,按回车键进入组策略编辑器。在组策略编辑器中,依次点击“计算机配置”-“管理模板”-“Windows组件”-“Windows Defender”。在右侧找到“关闭Windows Defender”选项,…

2023-12-16 LeetCode每日一题(统计区间中的整数数目)

2023-12-16每日一题 一、题目编号 2276. 统计区间中的整数数目二、题目链接 点击跳转到题目位置 三、题目描述 给你区间的 空 集,请你设计并实现满足要求的数据结构: **新增:**添加一个区间到这个区间集合中。 **统计:**计算…

爬虫引流(简单实现这个功能)

下面实现的这种方式过于简单,如果对爬虫有过了解的读者可以直接滤过这篇博客,因为确实没什么用。 实现原理 因为在你使用 request 获取网页源代码的过程中,实际上是通过向服务器发送请求来获取网页内容的。每一次请求都会被服务器记录下来&…

QGIS003:【08选择工具栏】-按范围选择、按属性选择、按位置选择

摘要:QGIS工程工具栏包括按范围选择、按属性选择、按位置选择、取消选择等选项,本文介绍各选项的基本操作。 实验数据: 链接:https://pan.baidu.com/s/15GfuR15CxA2OQzURjmjwaQ?pwd=u8sf 提取码:u8sf 一、按范围选择 有矩形框选、多边形选择、手绘选择以及按半径扩展…

【AIGC风格prompt】风格类绘画风格的提示词技巧

风格类绘画风格的提示词展示 主题:首先需要确定绘画的主题,例如动物、自然景观、人物等。 描述:根据主题提供详细的描述,包括颜色、情感、场景等。 绘画细节:描述绘画中的细节,例如表情、纹理、光影等。 场…

【C++】手撕 Vector类

目录 1,vector类框架 2,vector () 3,pinrt() 4,vector(int n, const T& value T()) 5,vector(const vector& v) 6,vector(InputIterator first, InputIterator last) 7,~vector…

Windows磁盘空间占用分析工具-WizTree

文章目录 WizTree作用WizTree树状分析图WizTree特点获取网址 WizTree作用 平时我们电脑用久了,产生很多文件,导致盘符空间不足,但是不知道那些文件占用比较多,这就需要磁盘空间分析工具-WizTree来分析文件占用情况 WizTree树状分…

计算机组成原理实训

文章目录 一、指令操作1、PC程序计数器2、目标编码3、总线规则4、算数运算5、逻辑运算6、源编码7、微变址 二、编码和微地址1、指令操作2、我的操作 问题描述 一、指令操作 1、PC程序计数器 PC装载(E/M IP 00): 当 E/M IP 设置为 00 时&…

spring-session升级之坑

项目场景: 因为某些组件低版本存在漏洞问题,本次对项目的springboot版本从1.x升级到了2.x,因为其他相关的中间件也随着一起升级,在升级最后发现项目用户信息无法获取到了。 问题描述 接口获取用户信息报错,获取用户信…

进位模拟数位拆分和最大公约数最小公倍数

一、进位模拟与数位拆分 1、AB 100以内的A B问题 题目描述: 小明只认识100以内的正整数,如果大于100的正整数,他只会拿这个数的后两位做运算。 输入 每行两个整数分别为A和B,中间以空格分开,数据有多组。 输出 输出小…

【ROS2】MOMO的鱼香ROS2(三)ROS2入门篇——ROS2第一个节点

ROS2第一个节点 引言1 认识ROS2节点1.1 节点之间的交互1.2 节点的命令行指令1.3 工作空间1.4 功能包1.4.1 功能包获取安装1.4.2 功能包相关的指令 ros2 pkg 2 ROS2构建工具—Colcon2.1 安装Colcon2.2 测试编译2.3 Colcon其他指令 3 使用RCLPY编写节点3.1 创建Python功能包3.2 编…

java初始化map的四种方式

第一种 最常见的方式(新建Map对象) public class Demo{ private static final Map<String, String> myMap new HashMap<String, String>(); static{myMap.put("a", "b"); myMap.put("c", "d"); } } 1234567第二种…

浏览器事件循环

一、浏览器的进程模型 浏览器是一个多进程多线程的应用程序&#xff0c;浏览器内部工件极其复杂&#xff0c;为了减少连环崩溃的几率&#xff0c;当启动浏览器后&#xff0c;它会自动启动多个进程&#xff0c;其中&#xff0c;有以下主要进程&#xff1a; 1.浏览器进程 浏览…

2023-12-14 LeetCode每日一题(用邮票贴满网格图)

2023-12-14每日一题 一、题目编号 2132. 用邮票贴满网格图二、题目链接 点击跳转到题目位置 三、题目描述 给你一个 m x n 的二进制矩阵 grid &#xff0c;每个格子要么为 0 &#xff08;空&#xff09;要么为 1 &#xff08;被占据&#xff09;。 给你邮票的尺寸为 stam…

git常用命令详解

git常用命令详解 Git 是一个分布式版本控制系统&#xff0c;用于追踪文件的变化并协作开发。以下是一些常用的 Git 命令及其详细说明&#xff1a; 初始化仓库&#xff1a; git init说明&#xff1a; 在当前目录下初始化一个新的 Git 仓库。 克隆仓库&#xff1a; git clone &…