FreezeJ' Blog

cryptography实现对称加密

2022-11-30

使用对称加密算法,可以将一些重要信息加密传输到目标后,使用相同的密钥解密,防止信息在传输过程中被窃取。

pypi:https://pypi.org/project/cryptography
官网:https://cryptography.io/

安装

$ pip install cryptography  # 本文使用版本为:cryptography==3.4.7

实现对称加密与解密

from cryptography.fernet import Fernet

key = Fernet.generate_key()  # 生成密钥
print(key)

f = Fernet(key)  # 使用密钥实例化

message = "test message"
print('加密前信息:', message)

token = f.encrypt(message.encode())
print('加密后信息:', token.decode())

decrypt_message = f.decrypt(token).decode()
print('解密后信息:', decrypt_message)

性能测试

import os
import time
from cryptography.fernet import Fernet

key = Fernet.generate_key()  # 生成密钥

f = Fernet(key)  # 使用密钥实例化

file_abspath = '/tmp/test_log.txt'
print('文件路径:', file_abspath)

stats = os.stat(file_abspath)
print('文件大小:', round(stats.st_size / 1024 / 1024, 4), 'Mb')

big_file = open(file_abspath, 'rb').read()

t1 = time.time()
token = f.encrypt(big_file)
print(f'加密耗时:{time.time() - t1}')

t2 = time.time()
decrypt_message = f.decrypt(token).decode()
print(f'解密耗时:{time.time() - t2}')

输出信息:

文件路径: /tmp/test_log.txt
文件大小: 11.8468 Mb
加密耗时:0.2421584129333496
解密耗时:0.22025561332702637

用该模块加密、解密10M左右的文件大约需要0.2秒(具体数值要看机器性能,这里只是做简单测试),说明普通的配置文件、模版文件等较小的文本使用该模块加解密问题不大,不会造成很长的阻塞。