当前位置: 首页 > article >正文

md5介绍及java实现

MD5介绍
MD5(Message Digest Algorithm 5)是一种广泛使用的哈希函数,它能够将任意长度的数据转换为一个128位(16字节)的哈希值(hash value),通常用于确保信息传输的完整一致性。MD5由罗纳德·李维斯特(Ronald Rivest)于1991年设计,尽管它在安全性上存在局限,已不推荐用于安全敏感的场合,但在一些非关键性的应用中,MD5仍然具有其使用价值,如验证文件传输的完整性、软件升级包的校验等。
MD5算法原理
MD5算法的主要步骤包括:
1.  填充消息:填充消息使其长度为448位(比512的整数倍少64位),然后附加64位的消息长度。
2.  初始化MD缓冲区:初始化四个32位的缓冲区(A、B、C、D)。
3.  处理消息分块:将消息分成512位的分块,依次处理每个分块。
4.  输出:拼接四个缓冲区的值,生成最终的128位哈希值。
Java实现MD5
在Java中,可以通过java.security.MessageDigest类来实现MD5加密。以下是一个简单的Java代码示例,展示如何使用MD5算法:
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class MD5Example {
    public static String toHexString(byte[] bytes) {
        StringBuilder hexString = new StringBuilder();
        for (byte b : bytes) {
            String hex = Integer.toHexString(0xff & b);
            if (hex.length() == 1) hexString.append('0');
            hexString.append(hex);
        }
        return hexString.toString();
    }

    public static String getMD5(String input) {
        try {
            MessageDigest md = MessageDigest.getInstance("MD5");
            byte[] messageDigest = md.digest(input.getBytes());
            return toHexString(messageDigest);
        } catch (NoSuchAlgorithmException e) {
            throw new RuntimeException(e);
        }
    }

    public static void main(String[] args) {
        String originalString = "Hello, MD5!";
        String md5Hash = getMD5(originalString);
        System.out.println("Original: " + originalString);
        System.out.println("MD5 Hash: " + md5Hash);
    }
}

这段代码首先创建了一个MessageDigest实例,指定使用MD5算法。然后,它将输入字符串转换为字节数组,并使用digest方法计算哈希值。最后,它将字节数组转换为十六进制字符串形式的哈希值。


http://www.kler.cn/a/418288.html

相关文章:

  • Android -- 简易音乐播放器
  • Vue中实现函数限流:节流和防抖
  • 爬取boss直聘上海市人工智能招聘信息+LDA主题建模
  • 斐波那契数
  • 【linux学习指南】Linux进程信号产生(三) 硬件异常除零出错?野指针异常?core文件
  • 微服务即时通讯系统的实现(服务端)----(3)
  • 增长比 C语言
  • 理解字母形状,从而获得含义
  • TypeScript核心语法(2)——基本用法
  • Midjourney Describe API 的对接和使用
  • Maven 常用命令
  • 计算机视觉:从核心算法到实际应用的全面解析
  • 【热门主题】000077 物联网智能项目:开启智能未来的钥匙
  • axios的认识与基本使用
  • ZYNQ详解
  • 通讯专题4.1——CAN通信之计算机网络与现场总线
  • 3x3矩阵,1x1矩阵,3X3零矩阵融合,矩阵乘法
  • 《操作系统 - 清华大学》6 -3:局部页面置换算法:最近最久未使用算法 (LRU, Least Recently Used)
  • docker快速部署kafka
  • Poetry 使用
  • 【maven-5】Maven 项目构建的生命周期:深入理解与应用
  • 偏差-方差权衡(Bias–Variance Tradeoff):理解监督学习中的核心问题
  • 新手SEO入门指南如何高效进行搜索引擎优化
  • ESLint CLI 深度解析:配置选项与高效工作流(5)
  • Python脚本:自动化下载视频的日志记录
  • 【从零开始的LeetCode-算法】3264. K 次乘运算后的最终数组 I