从MD5到RSA,一文读懂常见的加密算法

从MD5到RSA,一文读懂常见的加密算法

在数字化时代,数据安全至关重要。本文由唐叔为您深入浅出地讲解常见的加密算法,包括对称加密(AES/DES)、非对称加密(RSA/ECC)和哈希算法(MD5/SHA),分析它们的工作原理、应用场景及安全性比较。无论你是准备面试还是实际开发,这些加密知识都将成为你的强力武器!

关键词标签 :加密算法 AES RSA MD5 网络安全 数据加密 密码学 区块链安全 信息安全 程序员面试

一、为什么要了解加密算法?

掘友们好啊,我是你们的老朋友唐叔!最近有粉丝私信问我:"唐叔,面试总被问到加密算法,到底哪些是必须掌握的?"今天咱们就来好好聊聊这个话题。

在2023年全球网络安全报告中,数据泄露 事件同比增长了15%,平均每次泄露造成的损失高达424万美元!无论是Web开发、移动App还是区块链应用,加密算法都是守护数据安全的最后防线。掌握这些知识不仅能帮你通过技术面试,更能让你写出更安全的代码。

二、加密算法三大门派

1. 哈希算法:数据的"指纹提取器"

哈希算法就像给数据做"指纹鉴定",特点是:

单向不可逆

固定长度输出

微小的输入变化会导致输出巨变

常见算法:

MD5(128位哈希值):虽然已被证明不安全,但在校验文件完整性时仍被广泛使用

python

复制代码

import hashlib

def md5_hash(text):

md5 = hashlib.md5()

md5.update(text.encode('utf-8'))

return md5.hexdigest()

if __name__ == "__main__":

text = "唐叔讲算法"

print(f"MD5哈希值: {md5_hash(text)}")

# 输出示例: a7d8cd9e89d4f5c37f5a7d82b5a3c3f1

SHA系列(尤其是SHA-256):比特币等区块链技术的基石

java

复制代码

import hashlib

def sha256_hash(text):

sha256 = hashlib.sha256()

sha256.update(text.encode('utf-8'))

return sha256.hexdigest()

if __name__ == "__main__":

text = "区块链安全"

print(f"SHA-256哈希值: {sha256_hash(text)}")

# 输出示例: 5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8

加盐示例

python

复制代码

import hashlib

import os

import binascii

def hash_password(password):

# 生成随机盐

salt = os.urandom(16)

# 使用PBKDF2算法

dk = hashlib.pbkdf2_hmac('sha256', password.encode('utf-8'), salt, 100000)

return salt, dk

def verify_password(password, salt, stored_hash):

dk = hashlib.pbkdf2_hmac('sha256', password.encode('utf-8'), salt, 100000)

return dk == stored_hash

if __name__ == "__main__":

password = "securePassword123"

salt, hashed = hash_password(password)

print(f"盐值: {binascii.hexlify(salt).decode()}")

print(f"哈希值: {binascii.hexlify(hashed).decode()}")

# 验证密码

is_valid = verify_password(password, salt, hashed)

print(f"密码验证结果: {is_valid}")

📌 面试热点 :为什么密码存储要加盐(Salt)?就是为了防止彩虹表攻击!正确的做法是:hash(密码+随机盐值)

2. 对称加密:用同一把钥匙加解密

就像用同一把钥匙锁门和开门,特点是:

加解密速度快

适合大数据量加密

密钥分发是难点

主流算法:

AES(高级加密标准):目前最安全的对称算法,支持128/192/256位密钥

javascript

复制代码

from Crypto.Cipher import AES

from Crypto.Random import get_random_bytes

from Crypto.Util.Padding import pad, unpad

import base64

def aes_encrypt(plaintext, key=None):

if key is None:

key = get_random_bytes(16) # AES-128

# 生成随机初始化向量

iv = get_random_bytes(AES.block_size)

cipher = AES.new(key, AES.MODE_CBC, iv)

ciphertext = cipher.encrypt(pad(plaintext.encode('utf-8'), AES.block_size))

return iv, ciphertext, key

def aes_decrypt(iv, ciphertext, key):

cipher = AES.new(key, AES.MODE_CBC, iv)

plaintext = unpad(cipher.decrypt(ciphertext), AES.block_size)

return plaintext.decode('utf-8')

if __name__ == "__main__":

message = "敏感数据"

iv, ciphertext, key = aes_encrypt(message)

print(f"密钥: {base64.b64encode(key).decode()}")

print(f"IV: {base64.b64encode(iv).decode()}")

print(f"加密结果: {base64.b64encode(ciphertext).decode()}")

decrypted = aes_decrypt(iv, ciphertext, key)

print(f"解密结果: {decrypted}")

DES (已淘汰)和3DES:由于安全性问题,现在基本被AES取代

💡 性能对比:AES-256加密1GB文件比RSA快100倍以上,这也是为什么HTTPS协议中实际数据传输使用对称加密

3. 非对称加密:公钥私钥双剑合璧

采用数学难题保证安全,特点是:

公钥加密,私钥解密

计算复杂度高

适合密钥交换和数字签名

代表算法:

RSA:基于大整数分解难题,2048位密钥是当前安全标准

python

复制代码

from Crypto.PublicKey import RSA

from Crypto.Cipher import PKCS1_OAEP

import base64

def generate_rsa_keys():

key = RSA.generate(2048)

private_key = key.export_key()

public_key = key.publickey().export_key()

return private_key, public_key

def rsa_encrypt(public_key, plaintext):

rsa_key = RSA.import_key(public_key)

cipher = PKCS1_OAEP.new(rsa_key)

ciphertext = cipher.encrypt(plaintext.encode('utf-8'))

return ciphertext

def rsa_decrypt(private_key, ciphertext):

rsa_key = RSA.import_key(private_key)

cipher = PKCS1_OAEP.new(rsa_key)

plaintext = cipher.decrypt(ciphertext)

return plaintext.decode('utf-8')

if __name__ == "__main__":

message = "重要消息"

private_key, public_key = generate_rsa_keys()

print(f"公钥:\n{public_key.decode()}")

print(f"私钥:\n{private_key.decode()}")

encrypted = rsa_encrypt(public_key, message)

print(f"加密结果: {base64.b64encode(encrypted).decode()}")

decrypted = rsa_decrypt(private_key, encrypted)

print(f"解密结果: {decrypted}")

ECC(椭圆曲线加密):同等安全下密钥更短,特别适合移动设备

java

复制代码

from cryptography.hazmat.primitives.asymmetric import ec

from cryptography.hazmat.primitives import serialization

from cryptography.hazmat.primitives.kdf.hkdf import HKDF

from cryptography.hazmat.primitives import hashes

def generate_ecc_keys():

private_key = ec.generate_private_key(ec.SECP256R1())

public_key = private_key.public_key()

return private_key, public_key

def ecc_key_exchange(private_key, peer_public_key):

shared_key = private_key.exchange(ec.ECDH(), peer_public_key)

# 使用HKDF派生密钥

derived_key = HKDF(

algorithm=hashes.SHA256(),

length=32,

salt=None,

info=b'handshake data',

).derive(shared_key)

return derived_key

if __name__ == "__main__":

# Alice生成密钥对

alice_private, alice_public = generate_ecc_keys()

# Bob生成密钥对

bob_private, bob_public = generate_ecc_keys()

# Alice计算共享密钥

alice_shared = ecc_key_exchange(alice_private, bob_public)

# Bob计算共享密钥

bob_shared = ecc_key_exchange(bob_private, alice_public)

print(f"Alice的共享密钥: {alice_shared.hex()}")

print(f"Bob的共享密钥: {bob_shared.hex()}")

print(f"密钥是否匹配: {alice_shared == bob_shared}")

🌟 前沿趋势:随着量子计算机发展,基于格密码的后量子加密算法(NIST标准)将成为下一代安全标准

三、实战中的加密组合拳

1. HTTPS中的TLS协议

用RSA/ECC交换AES密钥

用AES加密实际通信数据

用SHA系列验证数据完整性

2. 区块链中的加密技术

比特币使用SHA-256做工作量证明

以太坊账户基于ECDSA(椭圆曲线数字签名算法)

智能合约使用Keccak-256作为哈希函数

3. 密码存储最佳实践

graph LR

A[用户密码] --> B[加随机盐]

B --> C[多次哈希迭代]

C --> D[存入数据库]四、加密算法选择指南

场景

推荐算法

密钥长度

备注

密码存储

PBKDF2/bcrypt

-

必须加盐

网络传输

AES-256

256位

配合RSA密钥交换

数字签名

ECDSA

256位

比RSA更高效

文件校验

SHA-256

-

替代不安全的MD5

移动端加密

ChaCha20

256位

比AES更适合ARM

五、总结与展望

通过今天的讲解,唐叔带大家系统梳理了:

哈希算法的"指纹"特性及其安全风险

对称加密的高效性及AES的统治地位

非对称加密的数学之美与性能瓶颈

实际工程中的组合应用方案

随着量子计算 和AI安全的发展,加密技术也在不断演进。建议开发者:

及时淘汰MD5/DES等不安全算法

关注NIST后量子密码标准化进程

在实际项目中合理选择加密组合

思考题:如果你的系统需要同时考虑性能和安全性,你会如何设计加密方案?欢迎在评论区与唐叔交流!

记得点赞收藏!#网络安全 #加密技术 #程序员进阶

(完)

相关推荐

三草两木美白祛斑霜一套需要多少价格?效果到底怎么样?
365彩票软件app下载

三草两木美白祛斑霜一套需要多少价格?效果到底怎么样?

⏱️ 07-04 👁️ 1315
钢铁守护者 (Ferrous Wroughtnaut) - [MMobs]Mowzie的生物 (Mowzie's Mobs) - MC百科
佳字五行属什么
365bet手机娱乐

佳字五行属什么

⏱️ 07-09 👁️ 3341
安全气囊
365彩票软件app下载

安全气囊

⏱️ 07-30 👁️ 4685
微信公众号改名全攻略:手把手教你轻松变更账号名字
365彩票软件app下载

微信公众号改名全攻略:手把手教你轻松变更账号名字

⏱️ 09-21 👁️ 4078
帮助下,青云5转详细流程?拜托高手!!
365bet手机娱乐

帮助下,青云5转详细流程?拜托高手!!

⏱️ 08-06 👁️ 1910