Java消息摘要:MD5验证数据完整性、密码的加密与校验

news2024/10/12 22:08:39

MD5(Message-Digest Algorithm 5)是一种被广泛使用的密码散列函数,是一种不可逆的加密算法,该算法可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输完整一致。MD5 由美国密码学家罗纳德·李维斯特(Ronald Linn Rivest)设计,于1991年公布,用以取代 MD4 算法。这套算法的程序在 RFC 1321 标准中被加以规范。1996年后该算法被证实存在弱点,可以被加以破解,对于需要高度安全性的数据,专家一般建议改用其他算法,如 SHA-2。2004年,证实MD5 算法无法防止碰撞(collision),因此不适用于安全性认证,如 SSL 公开密钥认证或是数字签名等用途。

MD5 算法的应用非常广泛,包括但不限于:

文件完整性校验:下载文件时,可以提供文件的 MD5 值,用户下载完文件后,用 MD5 工具可以计算出下载文件的 MD5 值,通过对比就可以校验文件的完整性。

密码存储:在存储用户密码时,通常不会存储明文密码,而是存储密码的 MD5 值。当然,为了安全,现在更推荐使用 SHA-256 等更安全的算法。

数字签名:虽然 MD5 算法不能防止碰撞,但仍可用于数字签名,因为签名通常还会结合其他机制(如私钥加密)来保证安全性。

然而,由于 MD5 算法的安全漏洞,现在已经不再推荐用于安全性要求较高的场合。对于需要高度安全性的应用,建议使用 SHA-256 或更高级的加密算法。

1、使用 MD5 消息摘要

消息摘要是密码学中的一个重要概念,它能够将任意长度的数据转换为固定长度的摘要值,这个摘要值通常是一个较短的字符串。消息摘要算法,也被称作散列算法,是一种单向加密算法,具有不可逆性,即无法从摘要值恢复出原始数据。

消息摘要的特点:

  1. 固定长度:无论输入的消息有多长,计算出来的消息摘要的长度总是固定的,如MD5的固定长度为128位(16字节)。
  2. 唯一性:只要输入的消息不同,对其进行摘要以后产生的摘要消息也必不相同;但相同的输入必会产生相同的输出。
  3. 不可逆性:消息摘要是单向的,无法从摘要值恢复出原始数据。
  4. 快速计算:消息摘要算法通常能够快速地计算出摘要值,适用于大数据量的处理。

【实例】使用 MD5 算法,生成消息摘要。

(1)创建 MD5Util 类(MD5消息摘要工具类)。

package com.pjb.util;

import java.nio.charset.StandardCharsets;
import java.security.MessageDigest;

/**
 * MD5消息摘要工具类
 * @author pan_junbiao
 **/
public class MD5Util
{
    //字符编码
    private final static String charsetName = StandardCharsets.UTF_8.name();

    //算法
    private final static String algorithm = "MD5";

    /**
     * MD5消息摘要
     */
    public static String encodeMD5(String data) throws Exception
    {
        //创建消息摘要对象
        MessageDigest messageDigest = MessageDigest.getInstance(algorithm);

        //执行消息摘要算法
        byte[] digestBytes = messageDigest.digest(data.getBytes(charsetName));

        //将指定byte数组转换成16进制字符串,否则输出的结果是一串乱码
        String result = byteToHexString(digestBytes);
        return result;
    }

    /**
     * 将指定byte数组转换成16进制字符串
     */
    private static String byteToHexString(byte[] b) {
        StringBuffer hexString = new StringBuffer();
        for (int i = 0; i < b.length; i++) {
            //把密文转换成16进制
            String hex = Integer.toHexString(b[i] & 0xFF);
            //如果密文的长度只有1位,则需要再高位进行补0
            if (hex.length() == 1) {
                hex = '0' + hex;
            }
            //拼接字符与转大写字母
            hexString.append(hex.toUpperCase());
        }
        return hexString.toString();
    }

}

(2)使用 MD5 算法,生成消息摘要。

/**
 * MD5消息摘要
 */
@Test
public void testMD5() throws Exception
{
    String data = "您好,欢迎访问 pan_junbiao的博客";
    String encodeMD5 = MD5Util.encodeMD5(data);

    //打印结果
    System.out.println("原始数据:" + data);
    System.out.println("MD5消息摘要:" + encodeMD5);
}

 执行结果:

2、密码的加密与校验

实际开发应用中,存储用户密码时,通常不会存储明文密码,而是存储密码的 MD5 值。在身份验证过程中,用户通常不会直接发送密码,而是发送密码的摘要值。服务器通过相同的摘要算法计算出的摘要值与数据库中存储的摘要值进行比对,从而验证用户身份。这种方法即使在数据被截获的情况下,也能够保护密码的安全。

【实例】使用 MD5 算法,实现密码的加密与校验。

/**
 * 密码的加密与校验
 */
@Test
public void createPasswordMD5() throws Exception
{
    String password = "123456"; //原始密码
    String salt = "ABCDEFG";    //盐

    //使用MD5算法,加密密码(密码格式:原始密码 + 盐)
    String passwordMD5 = MD5Util.encodeMD5(password + salt);

    //打印结果
    System.out.println("原始密码:" + password);
    System.out.println("MD5密码加密:" + passwordMD5);
}

 执行结果:

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

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

相关文章

【工具变量】知识产权示范城市DID(2000-2023年)

数据简介&#xff1a;为深入贯彻落实《国家知识产权战略纲要》&#xff0c;强化知识产权治理效能&#xff0c;国家知识产权局制定了《国家知识产权试点、示范城市&#xff08;城区&#xff09;评定和管理办法》&#xff0c;知识产权示范城市成为知识产权强国战略落地的城市支撑…

echarts 入门

工作中第一次碰到echarts&#xff0c;当时有大哥。二进宫没办法&#xff0c;只能搞定它。 感觉生活就是这样&#xff0c;不能解决的问题总是会反复出现。通过看视频、查资料&#xff0c;完成了工作要求。写一篇Hello World&#xff0c;进行备查。 基本使用 快速上手 <!DO…

QNAP新手必看!轻松搞定反向代理设置

反向代理是一种服务器配置&#xff0c;允许你通过一个域名或者IP地址来访问不同的内部应用服务。在QNAP NAS上配置反向代理可以提升应用程序的安全性和可访问性。 准备工作 确保QNAP NAS已连接网络并有公网IPv4/IPv6。 确认已启用Web服务 步骤 1&#xff1a;启用Web服务 登…

相机光学(三十九)——光学暗角与机械暗角

1.什么是暗角 在玩摄影一段时间,拍摄一定数量的照片之后,每个人都会不可避免地遇上一个新问题,那就是暗角现象。所谓暗角,是指在拍摄亮度均匀的场景时,画面的四角却出现与实际景物不符的、亮度降低的现象,又被称为“失光“。 2.暗角的成因 (1)边角的成像光线与镜头光轴…

【智能控制】第2章 专家系统,专家控制,模糊关系,模糊推理,专家PID控制

目录 2.1 专家系统 2.1.1 专家系统概述 2.1.2 专家系统构成 2.1.3 专家系统的建立 1&#xff0e;知识库 2&#xff0e;推理机 3&#xff0e;知识的表示 4&#xff0e;专家系统开发语言 5&#xff0e;专家系统建立步骤 第二节 专家控制 2&#xff0e;功能 3 与专家…

三、账号密码存储

使用Playfers存储 Unity本地持久化类Playerprefs使用详解 - PlaneZhong - 博客园 (cnblogs.com) 一、登陆界面切换 1、登陆界面的脚本&#xff08;机制类脚本&#xff09; 在这个UI上挂载一个脚本LoginWnd 先声明一下这个脚本&#xff0c;拖拽 2、在登录模块中调用 这里的l…

华为全联接大会2024 | 聚焦运维智能化,麒麟信安分享“基于大模型的新一代智能运维平台”

2024年9月19日至21日&#xff0c;以“共赢行业智能化”为主题的华为全联接大会2024在上海世博中心盛大召开。麒麟信安受邀出席大会&#xff0c;与全球的思想领袖、商业精英、技术专家和合作伙伴&#xff0c;共同探讨智能化、数字化技术赋能千行万业&#xff0c;把握新机遇&…

第十五章 Java多线程--线程池

目录 一、线程池基础概念 常见的线程池类型&#xff1a; 创建线程池的例子&#xff1a; 注意事项&#xff1a; 二、线程池使用场景 三、JDK自带的构建线程池的方式 1 newFixedThreadPool 2 newSingleThreadExecutor 3 newCachedThreadPool 4 newScheduleThreadPool …

震撼!一句话就让 AI 帮你做 UI 测试,多模态测试智能体 AUITestAgent 横空出世!

美团到店研发平台携手复旦大学周扬帆教授团队&#xff0c;共同开发了智能化终端测试工具AUITestAgent。该工具是第一个能够基于自然语言测试用例&#xff0c;自动化完成终端UI测试驱动、校验全流程的智能化测试工具。仅需输入自然语言形式的测试需求&#xff0c;AUITestAgent通…

福建谷器参加泉州市中小企业数字化转型试点工作启动会

为进一步加快推动试点城市工作,10月9日,泉州市产业数字化转型工作现场会暨2024年中小企业数字化转型试点工作启动会成功举办。出席本次会议的有福建省工业和信息化厅副厅长许永西、泉州市人民政府副市长雷连鸣等领导,及来自国家工业信息安全发展研究中心、中国工业互联网研究院…

newlibc memcpy 存在问题

背景 sdk 中发现 memcpy 函数没有达到预期&#xff0c;执行后&#xff0c;目的地址与源地址中的内容不一致。 复现方法 通过单步调试 memcpy 汇编代码&#xff0c;发现使用了 ldrh 指令&#xff0c;该指令在对 uncacheable memory 同时该 memory 非对齐的情况下&#xff0c;…

高性能计算平台(HPC)如何选型

选型高性能计算平台&#xff08;HPC&#xff09;非常复杂&#xff0c;需要考针对行业的痛点等多个因素进行考虑&#xff0c;来确保平台系统能满足特定行业和应用的需求。下面为大家列举了几个方面&#xff0c;大家可以参考。 1.计算需求 首先需要了解你需要处理的数据类型、计算…

如何给照片加文字?几个方法帮助你给照片轻松填字

如何给照片加文字&#xff1f;几个方法帮助你给照片轻松填字 给照片添加文字是常见的图片处理需求&#xff0c;尤其是在社交媒体、海报设计和个人相册制作中。以下是5款常用软件&#xff0c;它们能够帮助你轻松在照片上添加文字&#xff0c;满足不同层次的用户需求&#xff0c…

os镜像包一键安装

5、解压后点击运行旗胜PE维护系统。 6、插入U盘识别到U盘后点那个蓝色的制作启动U盘就可以了&#xff0c;设置用默认的就行不用改。 7、正在制作启动U盘中大约5分钟左右。 8、出现这个页面就制作完成了&#xff0c;可以关掉这个软件了 9、打开启动U盘就可以看到里面有os文件夹跟…

Python酷库之旅-第三方库Pandas(145)

目录 一、用法精讲 656、pandas.Timestamp.resolution属性 656-1、语法 656-2、参数 656-3、功能 656-4、返回值 656-5、说明 656-6、用法 656-6-1、数据准备 656-6-2、代码示例 656-6-3、结果输出 657、pandas.Timestamp.second属性 657-1、语法 657-2、参数 6…

Unity XR PICO 手势交互 Demo APK

效果展示 用手抓取物体&#xff0c;调整物体位置和大小等 亲测pico4 企业版可用&#xff0c; 其他设备待测试 下载链接&#xff1a; 我标记的不收费 https://download.csdn.net/download/qq_35030499/89879333

可观察性的三大支柱:统一日志、指标和跟踪

作者&#xff1a;来自 Elastic Elastic Observability Team 了解遥测信号&#xff0c;以便做出更好的决策、提高性能并增强客户体验。 多年来&#xff0c;遥测信号已经发生了重大变化 —— 如果你眨眼&#xff0c;你可能会错过它。事实上&#xff0c;关于可观察性的许多常识都…

DBA | 如何将 .mdf 与 .ldf 的数据库文件导入到SQL Server 数据库中?

[ 知识是人生的灯塔&#xff0c;只有不断学习&#xff0c;才能照亮前行的道路 ] 原文链接&#xff1a;DBA | 如何将 .mdf 与 .ldf 的数据库文件导入到SQL Server 数据库中? 如何将 (.mdf) 和 (.ldf) 的SQL Server 数据库文件导入到当前数据库中? Step 1.登录到 Sql Server 服…

“云计算+高职”:VR虚拟仿真实训室的发展前景

随着科技的飞速进步&#xff0c;云计算与虚拟现实&#xff08;VR&#xff09;技术的结合正在深刻改变着教育领域&#xff0c;尤其是在高等职业教育中&#xff0c;这一融合为实训教学带来了革命性的变革。VR虚拟仿真实训室作为这一变革的前沿阵地&#xff0c;正展现出广阔的发展…

PCL点云处理之求法向量

求法向量干什么&#xff1f;将点渲染成面 1、一个点垂直于一个曲线的切线叫法线 2、在点云中取一块区域&#xff0c;用最小二乘将区域中的点云拟合成一个面&#xff08;贴合在曲面上的一个切面&#xff09;在相近的区域计算出n个这样的面&#xff0c;用这个面求出法向量&#…