hutool.crypto.secure

Module Contents

Classes

SecureUtil

加密工具类

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