欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 科技 > IT业 > Python 加解密、Base64编解码算法汇编

Python 加解密、Base64编解码算法汇编

2025/3/9 9:58:55 来源:https://blog.csdn.net/webcai_3/article/details/146111031  浏览:    关键词:Python 加解密、Base64编解码算法汇编

        在Python中实现加密解密算法有多种方式,包括使用内置库如cryptography、hashlib、base64等,以及使用简单的算法如AES、DES等。下面我将介绍几种常用的加密解密方法。

1. 使用cryptography库

cryptography是一个强大的加密库,支持多种加密算法,包括对称加密(如AES)和非对称加密(如RSA)。

安装cryptography

pip install cryptography

(1)AES对称加密解密示例

from cryptography.hazmat.primitives.kdf.pbkdf2 import PBKDF2HMAC
from cryptography.hazmat.primitives import hashes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.primitives import padding
import os# 密钥和初始化向量生成
key = os.urandom(32)  # AES-256, 32 bytes
iv = os.urandom(16)  # AES block size is 16 bytes# 密码派生函数生成密钥
salt = os.urandom(16)
kdf = PBKDF2HMAC(algorithm=hashes.SHA256(), length=32, salt=salt, iterations=100000, backend=default_backend())
key = kdf.derive(b"my_secret_password")# 加密函数
def encrypt(data, key, iv):padder = padding.PKCS7(algorithms.AES.block_size).padder()padded_data = padder.update(data) + padder.finalize()cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())encryptor = cipher.encryptor()ct = encryptor.update(padded_data) + encryptor.finalize()return ct, salt, iv  # 返回密文和盐值和初始化向量# 解密函数
def decrypt(ct, key, iv):cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend())decryptor = cipher.decryptor()padded_data = decryptor.update(ct) + decryptor.finalize()unpadder = padding.PKCS7(algorithms.AES.block_size).unpadder()data = unpadder.update(padded_data) + unpadder.finalize()return data# 使用示例
data = b"Hello, World!"
ciphertext, salt, iv = encrypt(data, key, iv)
print("Encrypted:", ciphertext)
print("Decrypted:", decrypt(ciphertext, key, iv).decode())


(2)SM4加密解密示例

        SM4是中国国家标准的对称加密算法,类似于AES。下面是一个使用cryptography库进行SM4加密和解密的示例:

# 加密
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import padding
import os# 生成一个随机的密钥和IV(初始化向量)
key = os.urandom(32)  # SM4密钥长度为32字节
iv = os.urandom(16)   # IV长度为16字节# 待加密的数据
data = "Hello, SM4 encryption!".encode('utf-8')# 添加填充(PKCS7)
padder = padding.PKCS7(128).padder()
padded_data = padder.update(data) + padder.finalize()# 创建cipher对象
cipher = Cipher(algorithms.SM4(key), modes.CBC(iv), backend=default_backend())
encryptor = cipher.encryptor()# 加密数据
encrypted_data = encryptor.update(padded_data) + encryptor.finalize()
print("Encrypted:", encrypted_data.hex())# 解密
from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes
from cryptography.hazmat.backends import default_backend
from cryptography.hazmat.primitives import padding
import os# 密钥和IV(初始化向量)应与加密时使用的相同
key = os.urandom(32)  # 应与加密时使用的密钥相同
iv = os.urandom(16)   # 应与加密时使用的IV相同# 加密的数据(从上面获取或通过网络接收)
encrypted_data = bytes.fromhex("你的加密数据")  # 替换为实际的加密数据# 创建cipher对象进行解密
cipher = Cipher(algorithms.SM4(key), modes.CBC(iv), backend=default_backend())
decryptor = cipher.decryptor()# 解密数据并移除填充
decrypted_padded_data = decryptor.update(encrypted_data) + decryptor.finalize()
unpadder = padding.PKCS7(128).unpadder()
decrypted_data = unpadder.update(decrypted_padded_data) + unpadder.finalize()
print("Decrypted:", decrypted_data.decode('utf-8'))

注意事项:

  1. 密钥和IV:在加密和解密时,密钥和IV必须完全相同。通常,这些应该通过安全的方式传输和存储。

  2. 填充:在对数据进行加密前,通常需要添加填充以确保数据长度符合块大小的要求。解密时需要移除填充。这里使用了PKCS7填充。

  3. 安全性:确保使用足够安全的随机数生成器(如os.urandom)来生成密钥和IV。不要在代码中硬编码密钥和IV。

  4. 环境配置:确保你的Python环境支持SM4算法,这通常需要较新版本的cryptography库。可以通过pip install --upgrade cryptography来升级库。

2、使用hashlib进行哈希加密(不涉及解密)

hashlib用于生成数据的哈希值,而不是加密,因为哈希是不可逆的。但可以用来验证数据完整性。

import hashlibdata = "Hello, World!".encode()
hash_object = hashlib.sha256(data)
hex_dig = hash_object.hexdigest()
print("Hash:", hex_dig)

3. 使用base64进行编码(不是加密,但常用于编码和解码)

import base64data = b"Hello, World!"
encoded = base64.b64encode(data)
decoded = base64.b64decode(encoded)
print("Encoded:", encoded)
print("Decoded:", decoded)  # 注意:解码后是bytes类型,需要解码为str才能显示文本内容。
print("Decoded String:", decoded.decode())  # 显示文本内容。

        这些方法涵盖了从基本的编码解码到复杂的对称和非对称加密。选择哪种方法取决于具体需求,比如是否需要保密性、完整性或是仅仅是需要验证数据的完整性。对于需要保密性的场景,建议使用如AES的对称加密方法。对于需要公钥/私钥对的场景,可以考虑使用RSA等非对称加密算法。

另外还整理了一些优秀的加解密算法方面的博文方便今后查阅:

《python 加密与解密》

《python实现加密需求》

《用python加密文件与解密文件》

《使用纯Python算法实现非对称加密解密算法》

《python sm4加密和解密》

《Python实现SM4加解密算法》

《python 实现base64加密和base64解密算法》

《Python实现BASE64 算法》

《base64 --- Base16, Base32, Base64, Base85 数据编码》

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词