MCPcopy Create free account
hub / github.com/MearaY/StegaPy / CryptoUtil

Class CryptoUtil

StegaPy/util/crypto_util.py:14–121  ·  view source on GitHub ↗

加密工具类

Source from the content-addressed store, hash-verified

12
13
14class CryptoUtil:
15 """加密工具类"""
16
17 ALGO_DES = "DES"
18 ALGO_AES128 = "AES128"
19 ALGO_AES256 = "AES256"
20
21 # 8字节盐值
22 SALT = bytes([0x28, 0x5F, 0x71, 0xC9, 0x1E, 0x35, 0x0A, 0x62])
23 ITER_COUNT = 7
24
25 def __init__(self, password, algorithm='AES128'):
26 """初始化加密工具"""
27 self.password = password
28 self.algorithm = algorithm.upper() if algorithm else 'AES128'
29
30 # 根据算法确定密钥长度
31 if self.algorithm == 'AES128':
32 self.key_length = 16
33 elif self.algorithm == 'AES256':
34 self.key_length = 32
35 elif self.algorithm == 'DES':
36 self.key_length = 8
37 raise ValueError("DES算法已弃用,请使用AES128或AES256")
38 else:
39 raise ValueError(f"不支持的加密算法: {algorithm}")
40
41 # 生成密钥
42 self.key = self._derive_key(password)
43
44 def _derive_key(self, password):
45 """从密码派生密钥"""
46 kdf = PBKDF2HMAC(
47 algorithm=hashes.SHA256(),
48 length=self.key_length,
49 salt=self.SALT,
50 iterations=self.ITER_COUNT,
51 backend=default_backend()
52 )
53 return kdf.derive(password.encode())
54
55 def encrypt(self, data):
56 """加密数据"""
57 try:
58 # 生成随机IV
59 iv = os.urandom(16)
60
61 # 创建加密器
62 if self.algorithm.startswith('AES'):
63 cipher = Cipher(
64 algorithms.AES(self.key),
65 modes.CBC(iv),
66 backend=default_backend()
67 )
68 else:
69 raise ValueError(f"不支持的算法: {self.algorithm}")
70
71 encryptor = cipher.encryptor()

Callers 5

embed_dataMethod · 0.85
extract_dataMethod · 0.85
extract_dataFunction · 0.85
embed_dataFunction · 0.85
extract_dataFunction · 0.85

Calls

no outgoing calls

Tested by

no test coverage detected