mini_toolbox.crypt 源代码
#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# 用于字符串加解密, 支持DES/RSA
__all__ = ['CryptTools']
import os
import rsa
from base64 import b64encode, b64decode
from binascii import a2b_hex, b2a_hex
from pyDes import des, PAD_PKCS5
from typing import Optional
[文档]class CryptTools():
""" 用于字符串加解密, 支持DES/RSA
Args:
key (Optional[str]): 自定义密钥, 用于DES认证
priv (str): 自定义私钥文件路径, 用于RSA认证, 默认为当前路径下: ``priv.pem``
"""
def __init__(self, key: Optional[str] = None, priv: str = 'priv.pem'):
self.k = des(str(key).ljust(8, '%')[:8], padmode=PAD_PKCS5)
self.priv = priv
self.encoding = 'utf-8'
[文档] def des_encrypt(self, s: str) -> str:
""" DES 加密
Args:
s (str): 原始字符串
Returns:
str: 加密后字符串
"""
return b64encode(b2a_hex(self.k.encrypt(s))).decode(self.encoding)
[文档] def des_decrypt(self, s: str) -> str:
""" DES 解密
Args:
s (str): 加密后字符串
Returns:
str: 原始字符串
"""
return self.k.decrypt(a2b_hex(b64decode(s))).decode(self.encoding)
[文档] def rsa_encrypt(self, s: str) -> str:
""" RSA 加密, 私钥保存至 ``priv`` 文件
Args:
s (str): 原始字符串
Returns:
str: 加密后字符串
"""
pub_key, priv_key = rsa.newkeys(512)
os.makedirs(os.path.dirname(self.priv) or '.', exist_ok=True)
with open(self.priv, 'wb') as fp:
fp.write(priv_key.save_pkcs1())
return b64encode(rsa.encrypt(s.encode(self.encoding), pub_key)).decode(self.encoding)
[文档] def rsa_decrypt(self, s: str) -> str:
""" RSA 解密, 私钥读取自 ``priv`` 文件
Args:
s (str): 加密后字符串
Returns:
str: 原始字符串
"""
with open(self.priv, 'rb') as fp:
priv_data = fp.read()
priv_key = rsa.PrivateKey.load_pkcs1(priv_data)
return rsa.decrypt(b64decode(s), priv_key).decode(self.encoding)