什么是md5加密,怎么进行md5加密(md5加密原理和实现)

createh55个月前 (02-01)技术教程79

程序员们在使用存储密码数据的时候,经常会用到加密密码进行存储,今天来聊聊怎么进行md5加密。

MD5(Message-Digest Algorithm 5,消息摘要算法第五版)是一种使用的加密哈希函数,它可以产生一个128位(16字节)的哈希值,通常用一个32位的十六进制字符串表示。MD5由Ron Rivest在1991年设计,最初被用来作为一种安全的密码散列算法。

MD5的特点:

  1. 快速:MD5算法的计算速度非常快。
  2. 唯一性:理论上,不同的输入值应该产生不同的哈希值。
  3. 不可逆:MD5是单向的,无法从哈希值逆向推导出原始数据。

MD5的用途:

  1. 密码存储:在数据库中存储用户密码的哈希值,而不是明文密码。
  2. 数据完整性检查:用于检查文件或数据在传输过程中是否被篡改。
  3. 数字签名:用于验证数据的来源和完整性。

MD5的局限性:

  1. 安全性问题:MD5存在安全漏洞,容易受到碰撞攻击,即不同的输入可以产生相同的输出哈希值。
  2. 不再推荐:由于安全问题,MD5不再推荐用于需要高安全性的场合,如SSL/TLS和其他安全协议。

MD5加密的实现:

以下是一些编程语言中实现MD5加密的示例:

Python

import hashlib

# 字符串
original_text = "Hello, World!"
# 创建md5对象
md5_obj = hashlib.md5()
# 提供要加密的数据,这里需要将字符串编码成字节,然后更新到md5对象中
md5_obj.update(original_text.encode('utf-8'))
# 获取16进制的加密字符串
md5_hash = md5_obj.hexdigest()
print(md5_hash)  # 输出: 7c692cce3c1ceb7a047897c6c31c0a5

JavaScript

// 字符串
const originalText = "Hello, World!";
// 使用crypto-js库进行MD5加密
const md5Hash = CryptoJS.MD5(originalText).toString();
console.log(md5Hash);  // 输出: 7c692cce3c1ceb7a047897c6c31c0a5

Java

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;

public class Main {
    public static void main(String[] args) {
        String originalText = "Hello, World!";
        try {
            // 获取MD5摘要算法的 MessageDigest 实例
            MessageDigest md = MessageDigest.getInstance("MD5");
            // 计算哈希值
            md.update(originalText.getBytes());
            byte[] digest = md.digest();
            // 将哈希值转换为16进制字符串
            StringBuilder sb = new StringBuilder();
            for (byte b : digest) {
                sb.append(String.format("%02x", b));
            }
            System.out.println(sb.toString());  // 输出: 7c692cce3c1ceb7a047897c6c31c0a5
        } catch (NoSuchAlgorithmException e) {
            e.printStackTrace();
        }
    }
}

请注意,MD5算法由于其安全性问题,不应该用于需要高安全性的场合。对于需要更高安全性的应用,建议使用SHA-256或更安全的哈希函数。 创作不易,如果这篇文章对你有用,欢迎点赞关注加评论哦。

相关文章

「Java库」如何使用优秀的加密库Jasypt来保护你的敏感信息?

1 简介今天我们介绍一个Java库-Jasypt,全称为Java Simplified Encryption,用于加密解密。它能够让开发者用花费最小的工作而把加密集成到项目中,并且不需要对加密/解密有...

产品经理需要了解的接口知识(产品经理需要了解的专业术语)

作为后台产品经理,常常需要进行外部系统的对接,在设计开放平台接口过程中,往往会涉及接口传输安全性相关的问题,笔者在详细的查阅大量资料后,结合自身的过往经验,对于接口加密及签名的相关知识做了一个系统性的...

「Java工具类」Apache的DigestUtils加密工具类和Base64加解密类

介绍语本号主要是Java常用关键技术点,通用工具类的分享;以及springboot+springcloud+Mybatisplus+druid+mysql+redis+swagger+maven+do...

鸿蒙系统全面解析,诞生背景、技术细节生态圈一文看懂 | 智东西内参

华为6月2日正式发布的鸿蒙系统无疑占据了最近热点话题的C位,虽然不全是赞美的声音,但这种努力打破美国垄断,挑战谷歌、苹果在移动操作系统上垄断地位的尝试必将成为中国科技史上的里程碑事件。本期的智能内参,...

连微服务Nacos配置中心都不了解,那你可能注定就是个码农

背景在我们最开始做一些简单的学习项目的时候,我们会遇到一些需要配置的东西,比如数据库连接池大小,用户的黑名单等等,我们都把这些东西写死在代码里面,比如if(userId == 123){do some...