hutool.crypto.secure¶
Module Contents¶
Classes¶
加密工具类 |
API¶
- class hutool.crypto.secure.SecureUtil¶
加密工具类
提供常用对称/非对称加密算法封装: - AES(CBC/ECB/CTR) - DES(CBC/ECB) - RSA(加密/解密/签名/验签)
- _CAESAR_TABLE = 'AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz'¶
- static _ensure_bytes(data: Union[str, bytes]) bytes¶
将输入统一转为 bytes。
- 参数:
data – 字符串或字节数据
- 返回:
字节数据
- static generate_aes_key(key_size: int = 128) bytes¶
生成AES密钥
- 参数:
key_size – 密钥位数,支持 128、192、256
- 返回:
随机密钥 bytes
- static encrypt_aes(data: bytes, key: bytes, mode: str = 'CBC', iv: Optional[bytes] = None) bytes¶
AES加密
- 参数:
data – 待加密数据(明文)
key – AES密钥(16/24/32字节)
mode – 加密模式,支持 CBC / ECB / CTR
iv – 初始化向量(CBC/CTR模式必填,ECB模式忽略)
- 返回:
密文 bytes(CBC/CTR模式前16字节为IV)
- static decrypt_aes(data: bytes, key: bytes, mode: str = 'CBC', iv: Optional[bytes] = None) bytes¶
AES解密
- 参数:
data – 密文 bytes(如果未提供iv,CBC/CTR模式会从前16字节读取IV)
key – AES密钥
mode – 加密模式,支持 CBC / ECB / CTR
iv – 初始化向量(可选,不提供时从密文前缀读取)
- 返回:
解密后的明文 bytes
- static generate_des_key() bytes¶
生成DES密钥(8字节)。
- 返回:
随机DES密钥 bytes
- static encrypt_des(data: bytes, key: bytes, mode: str = 'CBC', iv: Optional[bytes] = None) bytes¶
DES加密
- 参数:
data – 待加密数据
key – DES密钥(8字节)
mode – 加密模式,支持 CBC / ECB
iv – 初始化向量(CBC模式必填或自动生成)
- 返回:
密文 bytes(CBC模式前8字节为IV)
- static decrypt_des(data: bytes, key: bytes, mode: str = 'CBC', iv: Optional[bytes] = None) bytes¶
DES解密
- 参数:
data – 密文 bytes(如果未提供iv,CBC模式会从前8字节读取IV)
key – DES密钥(8字节)
mode – 加密模式,支持 CBC / ECB
iv – 初始化向量(可选)
- 返回:
解密后的明文 bytes
- static generate_rsa_key_pair(key_size: int = 2048) Tuple[bytes, bytes]¶
生成RSA密钥对
- 参数:
key_size – 密钥位数,默认2048
- 返回:
(public_key_pem, private_key_pem) 元组
- static encrypt_rsa(data: bytes, public_key_pem: bytes) bytes¶
RSA公钥加密
- 参数:
data – 待加密数据(长度受密钥大小限制)
public_key_pem – PEM格式公钥
- 返回:
密文 bytes
- static decrypt_rsa(data: bytes, private_key_pem: bytes) bytes¶
RSA私钥解密
- 参数:
data – 密文 bytes
private_key_pem – PEM格式私钥
- 返回:
明文 bytes
- static sign_with_rsa(data: bytes, private_key_pem: bytes) bytes¶
RSA私钥签名
- 参数:
data – 待签名数据
private_key_pem – PEM格式私钥
- 返回:
签名 bytes
- static verify_with_rsa(data: bytes, signature: bytes, public_key_pem: bytes) bool¶
RSA公钥验签
- 参数:
data – 原始数据
signature – 签名 bytes
public_key_pem – PEM格式公钥
- 返回:
验签是否通过
- static caesar_encode(message: str, offset: int) str¶
凯撒密码加密。
仅对
A-Za-z字母字符进行移位,其他字符保持不变。 使用交替大小写的字母表(AaBbCc…Zz,共 52 个字符)。Examples:
caesar_encode("Hello", 1) -> "Ifmmp"
- 参数:
message – 明文
offset – 移位量(正整数)
- 返回:
密文
- static caesar_decode(message: str, offset: int) str¶
凯撒密码解密。
与
caesar_encode()配对使用。Examples:
caesar_decode("Ifmmp", 1) -> "Hello"
- 参数:
message – 密文
offset – 移位量(与加密时相同)
- 返回:
明文
- static generate_key(algorithm: str = 'AES', key_size: int = 128) bytes¶
生成对称加密密钥
- 参数:
algorithm – 算法名称,支持 ‘AES’, ‘DES’, ‘DESede’
key_size – 密钥位数
- 返回:
随机密钥 bytes
- static desede(key: bytes, mode: str = 'CBC') Tuple¶
TripleDES加密解密快捷方法
返回一个元组
(encrypt_func, decrypt_func),每个函数接受data: bytes和可选iv: bytes参数。- 参数:
key – TripleDES密钥(24字节)
mode – 加密模式
- 返回:
(encrypt_func, decrypt_func) 元组
- static md5(data: Union[str, bytes]) str¶
MD5摘要便捷方法(返回十六进制)
- 参数:
data – 输入数据
- 返回:
MD5十六进制字符串
- static sha1(data: Union[str, bytes]) str¶
SHA-1摘要便捷方法
- 参数:
data – 输入数据
- 返回:
SHA-1十六进制字符串
- static sha256(data: Union[str, bytes]) str¶
SHA-256摘要便捷方法
- 参数:
data – 输入数据
- 返回:
SHA-256十六进制字符串
- static hmac_md5(data: Union[str, bytes], key: Union[str, bytes]) str¶
HMAC-MD5便捷方法
- 参数:
data – 输入数据
key – HMAC密钥
- 返回:
HMAC-MD5十六进制字符串
- static hmac_sha1(data: Union[str, bytes], key: Union[str, bytes]) str¶
HMAC-SHA1便捷方法
- 参数:
data – 输入数据
key – HMAC密钥
- 返回:
HMAC-SHA1十六进制字符串
- static hmac_sha256(data: Union[str, bytes], key: Union[str, bytes]) str¶
HMAC-SHA256便捷方法
- 参数:
data – 输入数据
key – HMAC密钥
- 返回:
HMAC-SHA256十六进制字符串
- static pbkdf2(password: Union[str, bytes], salt: Union[str, bytes], iterations: int = 10000, key_length: int = 32) bytes¶
PBKDF2密钥派生
- 参数:
password – 密码
salt – 盐值
iterations – 迭代次数
key_length – 输出密钥长度
- 返回:
派生密钥 bytes
- static decode(data: Union[str, bytes]) bytes¶
自动检测并解码(Hex或Base64)
先尝试Hex解码,失败则尝试Base64解码。
- 参数:
data – Hex或Base64编码的数据
- 返回:
解码后的 bytes
- static sign_params(params: dict, secret: str, algorithm: str = 'sha256') str¶
参数签名
将参数按键名排序拼接后,使用指定算法与密钥进行签名。
- 参数:
params – 参数字典
secret – 密钥
algorithm – 签名算法
- 返回:
签名字符串
- static aes_encryptor(key: bytes, mode: str = 'CBC') tuple¶
AES 加密器工厂
返回
(encrypt_func, decrypt_func)元组。 encrypt_func 接受(data, iv=None)参数。 decrypt_func 接受(data, iv=None)参数。- 参数:
key – AES 密钥(16/24/32 字节)
mode – 加密模式,支持 CBC / ECB / CTR
- 返回:
(encrypt_func, decrypt_func) 元组
- 返回类型:
tuple
- static des_encryptor(key: bytes, mode: str = 'CBC') tuple¶
DES 加密器工厂
返回
(encrypt_func, decrypt_func)元组。- 参数:
key – DES 密钥(8 字节)
mode – 加密模式,支持 CBC / ECB
- 返回:
(encrypt_func, decrypt_func) 元组
- 返回类型:
tuple
- static rc4_encryptor(key: Union[str, bytes]) tuple¶
RC4 流密码加密器工厂
返回
(encrypt_func, decrypt_func)元组。 RC4 加密和解密使用相同操作,因此两个函数等价。- 参数:
key – RC4 密钥(任意长度字节或字符串)
- 返回:
(encrypt_func, decrypt_func) 元组
- 返回类型:
tuple
- static rsa_encryptor(private_key_pem: bytes, public_key_pem: bytes) tuple¶
RSA 加密器工厂
返回
(encrypt_func, decrypt_func)元组。 encrypt_func 使用公钥加密,decrypt_func 使用私钥解密。- 参数:
private_key_pem – PEM 格式私钥
public_key_pem – PEM 格式公钥
- 返回:
(encrypt_func, decrypt_func) 元组
- 返回类型:
tuple
- static hmac_creator(algorithm: str, key: Union[str, bytes])¶
HMAC 创建器
返回一个可调用的 HMAC 对象,支持多次
update(data)后调用hexdigest()/digest()获取结果。- 参数:
algorithm – 哈希算法名称,如 ‘md5’、’sha1’、’sha256’
key – HMAC 密钥
- 返回:
HMAC 对象
- static sign_data(data: Union[str, bytes], algorithm: str = 'SHA256', private_key_pem: Optional[bytes] = None) bytes¶
数据签名
若提供私钥则使用 RSA-PSS 签名,否则使用 HMAC 签名。
- 参数:
data – 待签名数据
algorithm – 签名算法,支持 ‘SHA256’、’SHA1’、’MD5’ 等
private_key_pem – PEM 格式私钥(可选,不提供则使用 HMAC)
- 返回:
签名 bytes
- 返回类型:
bytes
- static generate_key_pair(algorithm: str = 'RSA', key_size: int = 2048) Tuple[bytes, bytes]¶
生成密钥对
- 参数:
algorithm – 算法名称,目前仅支持 ‘RSA’
key_size – 密钥位数,默认 2048
- 返回:
(public_key_pem, private_key_pem) 元组
- 返回类型:
tuple