import hashlib
import time
import hmac
import hashlib
class SignUtil:
SECRET = "PROJECT_SECRET_2025"
@classmethod
def make_sign(cls, params: dict) -> str:
"""
企业标准签名生成
:param params: 接口参数
:return: sign 签名
"""
sorted_items = sorted(params.items())
temp_str = "&".join([f"{k}={v}" for k, v in sorted_items])
temp_str += f"&secret={cls.SECRET}"
md5 = hashlib.md5(temp_str.encode("utf-8"))
return md5.hexdigest().upper()
@classmethod
def timestamp(cls) -> str:
"""时间戳:防重复请求"""
return str(int(time.time()))
class HmacSha256:
SECRET_KEY = "your_project_secret_key_here"
@classmethod
def sign(cls, data: dict) -> str:
"""
企业标准 HMAC-SHA256 签名
"""
sorted_items = sorted(data.items())
plain_text = "".join([f"{k}{v}" for k, v in sorted_items])
hmac_obj = hmac.new(
key=cls.SECRET_KEY.encode("utf-8"),
msg=plain_text.encode("utf-8"),
digestmod=hashlib.sha256
)
return hmac_obj.hexdigest().lower()
from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
import base64
class AesUtil:
KEY = "1234567890123456"
IV = "abcdefghijklmnop"
@classmethod
def encrypt(cls, text: str) -> str:
"""加密:明文 → 密文"""
aes = AES.new(cls.KEY.encode(), AES.MODE_CBC, cls.IV.encode())
padded = pad(text.encode('utf-8'), AES.block_size)
encrypted = aes.encrypt(padded)
return base64.b64encode(encrypted).decode()
@classmethod
def decrypt(cls, base64_cipher: str) -> str:
"""解密:密文 → 明文"""
aes = AES.new(cls.KEY.encode(), AES.MODE_CBC, cls.IV.encode())
encrypted = base64.b64decode(base64_cipher)
decrypted = aes.decrypt(encrypted)
unpadded = unpad(decrypted, AES.block_size)
return unpadded.decode('utf-8')
from Crypto.PublicKey import RSA
from Crypto.Cipher import PKCS1_v1_5
import base64
class RsaUtil:
PUBLIC_KEY = """
-----BEGIN PUBLIC KEY-----
MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQC...
-----END PUBLIC KEY-----
"""
@classmethod
def encrypt(cls, text: str) -> str:
"""RSA 公钥加密"""
pub_key = RSA.importKey(cls.PUBLIC_KEY)
cipher = PKCS1_v1_5.new(pub_key)
encrypted = cipher.encrypt(text.encode("utf-8"))
return base64.b64encode(encrypted).decode()
import jwt
class JwtUtil:
SECRET = "JWT_SECRET_2026"
ALGORITHM = "HS256"
@classmethod
def encode(cls, payload: dict) -> str:
"""生成 JWT"""
return jwt.encode(payload, cls.SECRET, algorithm=cls.ALGORITHM)
@classmethod
def decode(cls, token: str) -> dict:
"""解析 JWT"""
return jwt.decode(token, cls.SECRET, algorithms=[cls.ALGORITHM])