FakeOrange
预计阅读时间:4分钟0秒

常见加密算法及Python的简单实现

介绍常见的加密算法及Python的运行使用

0
0

前言


介绍一些常见的加密算法的使用场景与实现方式。



1. 对称加密算法


对称加密是一种密钥加密方法,使用相同的密钥进行加密和解密。常见的对称加密算法包括:


  • DES(Data Encryption Standard):DES是一种较早的加密标准,使用56位密钥进行加密,但由于密钥长度较短,现已被认为不够安全。


  • AES(Advanced Encryption Standard):AES是一种现代化、常用且安全的加密算法。它支持128位、192位和256位密钥长度。


对称加密算法(如DES、AES)主要用于在加密和解密双方有固定密钥的场景,通常用于以下场景:


  • 数据库加密:对称加密可以用来加密存储在数据库中的敏感信息,如用户密码(在一些特殊场景)、个人信息等。


  • 文件加密:对称加密适合用于加密需要保存到磁盘或传输的文件,以保证数据在未授权访问下不会被读取。


  • 网络传输:在一些需要快速加密的传输场景中(如VPN、SSL/TLS会话密钥),使用对称加密能提高速度。


Python的实现可以使用pycryptodome库:


from Crypto.Cipher import AES
from Crypto.Random import get_random_bytes

key = get_random_bytes(16)  # 16字节的密钥对应128位
cipher = AES.new(key, AES.MODE_EAX)
plaintext = b'Hello, World!'
ciphertext, tag = cipher.encrypt_and_digest(plaintext)
print("加密后的内容:", ciphertext)


2. 非对称加密算法


非对称加密使用公钥和私钥成对出现,公钥用于加密,私钥用于解密。常见的非对称加密算法包括:


  • RSA:RSA算法广泛用于数据加密和数字签名,基于大素数分解的数学难题。


非对称加密算法(如RSA、ECC)的典型应用场景包括:


  • 密钥交换:在SSL/TLS协议中,客户端和服务器通过非对称加密交换会话密钥,然后使用对称加密保护会话内容。


  • 数字证书:非对称加密可用于数字证书的生成和验证(如HTTPS中的SSL证书),确保通信方的身份合法。


  • 加密邮件:非对称加密常用于电子邮件加密,收件人使用私钥解密内容,保证只有特定收件人可以读取信息。


Python的实现可以使用cryptography库:


from cryptography.hazmat.primitives.asymmetric import rsa
from cryptography.hazmat.primitives import serialization, hashes
from cryptography.hazmat.primitives.asymmetric import padding

private_key = rsa.generate_private_key(public_exponent=65537, key_size=2048)
public_key = private_key.public_key()

plaintext = b'Hello, RSA!'
ciphertext = public_key.encrypt(
    plaintext,
    padding.OAEP(
        mgf=padding.MGF1(algorithm=hashes.SHA256()),
        algorithm=hashes.SHA256(),
        label=None
    )
)
print("加密后的内容:", ciphertext)


3. 哈希算法


哈希算法用于生成固定长度的“摘要”值,不可逆,常用于密码存储和数据完整性验证。常见的哈希算法包括:


  • MD5(Message Digest Algorithm 5):已不再安全,但仍被用作数据完整性校验。


  • SHA-256:SHA(Secure Hash Algorithm)系列中较常用的一种,生成256位的哈希值。


哈希算法(如MD5、SHA-256)的主要应用场景包括:


  • 数据完整性验证:哈希值能检测数据在传输或存储过程中是否被篡改,例如文件下载完成后与原始哈希值比对以确认完整性。


  • 密码存储:在许多系统中,密码会使用哈希算法进行不可逆加密,存储的是哈希值而非明文。为了提高安全性,通常会结合“盐”(salt)值使用,如通过bcrypt、PBKDF2等方式对哈希结果进行处理。


  • 区块链:区块链中的每个区块都使用哈希算法链接起来,保证区块数据的不可篡改性。


Python的实现可以使用hashlib库:


import hashlib

message = b'Hello, Hash!'
md5_hash = hashlib.md5(message).hexdigest()
sha256_hash = hashlib.sha256(message).hexdigest()
print("MD5 哈希值:", md5_hash)
print("SHA-256 哈希值:", sha256_hash)


4. 数字签名


数字签名用于验证消息的完整性和发送者的身份,通常依赖非对称加密。


数字签名的主要应用场景包括:


  • 消息或文档签名:用于证明消息或文件的真实性和完整性,通常用于电子邮件、合同等需要验证来源和内容完整性的场景。


  • 软件发布与更新:软件开发者可以使用数字签名来对发布的软件包进行签名,用户在下载后验证签名,以确保软件未被篡改。


  • 区块链交易:区块链中每笔交易都使用数字签名以确保交易的真实性,确保只有合法拥有者可以发起交易。


Python可以使用cryptography库来生成和验证数字签名:


from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.primitives.asymmetric import padding

message = b'Hello, Sign!'
signature = private_key.sign(
    message,
    padding.PSS(
        mgf=padding.MGF1(hashes.SHA256()),
        salt_length=padding.PSS.MAX_LENGTH
    ),
    hashes.SHA256()
)
print("签名内容:", signature)


5. JSON Web Token(JWT)


JWT是一种基于JSON的认证和授权方法,不直接用于加密,而是对用户数据进行签名和加密后生成的令牌。


JWT 主要用于认证和授权场景,特别是在分布式系统和RESTful API中:


  • 用户身份验证:在用户登录时生成JWT,将其作为访问令牌,之后用户每次请求时都携带JWT,以证明其身份,避免频繁验证。


  • 授权管理:JWT可以嵌入用户权限信息,用于在微服务架构中实现分布式授权控制。


  • 单点登录 (SSO):在单点登录系统中,JWT可以用来传递用户身份信息,支持跨系统的认证授权。


Python的实现可以使用pyjwt库:


import jwt

payload = {'user_id': 123}
secret = 'mysecret'
token = jwt.encode(payload, secret, algorithm='HS256')
print("JWT 令牌:", token)


以上是一些常见的加密方式、哈希算法和相关的Python实现。不同的算法有不同的应用场景,在选择时要综合考虑安全性和性能。


评论
Copyright Created by DataER | 沪ICP备2024052789号-5 | 沪公网安备31010402336337号