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

几种数据加密方法

MD5加密处理的实现方法

MD5(Message-Digest Algorithm 5)是一种广泛使用的哈希算法,可以将任意长度的数据转换为128位(16字节)的哈希值。以下是几种常见编程语言中实现MD5加密的方法:

Python:


import hashlibdef md5_encrypt(text):# 创建md5对象md5 = hashlib.md5()# 更新哈希对象,必须编码为bytesmd5.update(text.encode('utf-8'))# 获取16进制哈希值return md5.hexdigest()# 使用示例
print(md5_encrypt("Hello World"))  # 输出: b10a8db164e0754105b7a99be72e3fe5

Java:

import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;public class MD5Util {public static String md5Encrypt(String input) {try {MessageDigest md = MessageDigest.getInstance("MD5");byte[] messageDigest = md.digest(input.getBytes());// 转换为16进制字符串StringBuilder hexString = new StringBuilder();for (byte b : messageDigest) {String hex = Integer.toHexString(0xff & b);if (hex.length() == 1) {hexString.append('0');}hexString.append(hex);}return hexString.toString();} catch (NoSuchAlgorithmException e) {throw new RuntimeException(e);}}// 使用示例public static void main(String[] args) {System.out.println(md5Encrypt("Hello World"));  // 输出: b10a8db164e0754105b7a99be72e3fe5}
}

JavaScript实现 (在浏览器中)

function md5Encrypt(input) {return crypto.subtle.digest('MD5', new TextEncoder().encode(input)).then(hash => {// 转换为16进制字符串return Array.from(new Uint8Array(hash)).map(b => b.toString(16).padStart(2, '0')).join('');});
}// 使用示例
md5Encrypt("Hello World").then(console.log);  // 输出: b10a8db164e0754105b7a99be72e3fe5

注意事项

  • MD5已被证明存在碰撞漏洞,不适用于安全性要求高的场景,如密码存储

  • 对于密码存储,建议使用更安全的算法如bcrypt、PBKDF2或Argon2

  • MD5结果固定,相同输入总是产生相同输出

  • MD5是单向哈希,无法逆向解密

哈希算法

特点:不可逆,用于验证数据完整性和存储密码。

常用算法:

SHA-256 / SHA-512:主流安全哈希算法

bcrypt / Argon2:加盐哈希算法,专门用于密码存储

使用场景:

用户密码存储(数据库中存哈希值)

文件完整性校验

Token生成

SHA-256 (Python)

import hashlibdef sha256_hash(text):sha256 = hashlib.sha256()sha256.update(text.encode('utf-8'))return sha256.hexdigest()print(sha256_hash("Hello World"))  # 输出: a591a6d40bf420404a011733cfb7b190d62c65bf0bcda32b57b277d9ad9f146

BLAKE2 (JavaScript Node.js)

const crypto = require('crypto');function blake2sHash(input) {return crypto.createHash('blake2s256').update(input).digest('hex');
}console.log(blake2sHash("Hello World"));  // 输出: 32位哈希值

密码哈希

Argon2 (Python)

import argon2def argon2_hash(password):# 参数: 时间成本, 内存成本(KB), 并行度hasher = argon2.PasswordHasher(time_cost=3, memory_cost=65536, parallelism=4, hash_len=32, salt_len=16)return hasher.hash(password)print(argon2_hash("securePassword"))

对称加密

特点:加密和解密使用相同的密钥,速度快,适合大数据量加密。

常用算法:

AES(Advanced Encryption Standard):当前最常用的对称加密算法,安全性高,支持128、192、256位密钥。

DES / 3DES:已被认为不安全,逐渐淘汰。

使用场景:

数据库中的数据加密(如字段加密)

本地文件加密

数据传输过程中的数据块加密

AES (Java)

import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import java.util.Base64;public class AESExample {public static void main(String[] args) throws Exception {String plainText = "Hello World";// 生成密钥KeyGenerator keyGen = KeyGenerator.getInstance("AES");keyGen.init(256); // 可以是128, 192或256SecretKey secretKey = keyGen.generateKey();// 加密Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");byte[] iv = new byte[16]; // 初始化向量cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(iv));byte[] encrypted = cipher.doFinal(plainText.getBytes());System.out.println("加密结果: " + Base64.getEncoder().encodeToString(encrypted));}
}

ChaCha20 (Python)

from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
import osdef chacha20_encrypt(message, key):nonce = os.urandom(16)cipher = Cipher(algorithms.ChaCha20(key, nonce),mode=None,backend=default_backend())encryptor = cipher.encryptor()ciphertext = encryptor.update(message.encode()) + encryptor.finalize()return nonce + ciphertextkey = os.urandom(32)  # ChaCha20需要256(32字节)密钥
encrypted = chacha20_encrypt("Secret Message", key)
print("加密结果:", encrypted.hex())

非对称加密

特点:使用一对公钥和私钥,适合安全通信、身份验证,但速度慢。

常用算法:

RSA:经典的非对称加密,常用于数字签名、密钥交换。

ECC(椭圆曲线加密):更高效、密钥更短但同样安全,越来越受欢迎。

使用场景:

SSL/TLS 证书加密网站通信(HTTPS)

API接口的签名验证

身份认证与密钥交换

RSA (Python)

from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization
from cryptography.hazmat.primitives.asymmetric import padding
from cryptography.hazmat.primitives import hashes# 生成密钥对
private_key = rsa.generate_private_key(public_exponent=65537,key_size=2048
)
public_key = private_key.public_key()# 加密
message = b"Secret Message"
ciphertext = public_key.encrypt(message,padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),algorithm=hashes.SHA256(),label=None)
)print("加密结果:", ciphertext.hex())# 解密
plaintext = private_key.decrypt(ciphertext,padding.OAEP(mgf=padding.MGF1(algorithm=hashes.SHA256()),algorithm=hashes.SHA256(),label=None)
)print("解密结果:", plaintext.decode())
http://www.xdnf.cn/news/7230.html

相关文章:

  • 践行“科学智能”!和鲸打造 AI for Science 专属应用
  • docker安装Prometheus+Grafana
  • python如何遍历postgresql所有的用户表
  • OpenHarmony外设驱动使用 (五),Fingerprint_auth
  • ubuntu22.04 卸载ESP-IDF
  • AIGC与数字金融:人工智能金融创新的新纪元
  • [Java][Leetcode middle] 151. 反转字符串中的单词
  • Dify-3:系统架构
  • 国产 iPaaS 与国外 iPaaS 产品相比如何?以谷云科技为例
  • HTML向四周扩散背景
  • Linux-进程间通信
  • Redis有哪些常用应用场景?
  • Kubernetes MCP服务器(K8s MCP):如何使用?
  • upload-labs通关笔记-第12关 文件上传之白名单GET法
  • 【Unity 2023 新版InputSystem系统】新版InputSystem 如何进行人物移动(包括配置、代码详细实现过程)
  • 【软考-架构】15、软件架构的演化和维护
  • 第2篇 水滴穿透:IGBT模块的绝对防御体系
  • NIFI 2.40简介及部署
  • python实现pdf转图片(针对每一页)
  • 手机内存不够,哪些文件可以删?
  • 电气材料的分类及应用
  • MySQL 8.0 OCP 英文题库解析(五)
  • python文件部署docker,容器路径与系统路径映射
  • ionic 列表操作详解
  • 基于vue框架的东莞市二手相机交易管理系统5yz0u(程序+源码+数据库+调试部署+开发环境)带论文文档1万字以上,文末可获取,系统界面在最后面。
  • 解决Windows磁盘管理中因夹卷导致的无法分区问题
  • 146. LRU 缓存
  • 自己拥有一台服务器可以做哪些事情
  • 科技行业智能化升级经典案例—某芯片公司
  • Perl测试管理:从混乱到高效的系统化实践