编辑代码

from Crypto.Cipher import AES
from Crypto.Util.Padding import pad, unpad
from Crypto.Util.strxor import strxor
import base64
import hashlib

class AESCipher:
    def __init__(self, key):
        # CryptoJS uses UTF-8 encoding for the key
        self.key = key.encode('utf-8')
        
        # Create a 16-byte key using MD5 hash if needed (like CryptoJS does)
        if len(self.key) != 16:
            md5_hash = hashlib.md5()
            md5_hash.update(self.key)
            self.key = md5_hash.digest()[:16]
            
        self.block_size = AES.block_size
    
    def encrypt(self, data):
        # Create AES cipher in ECB mode
        cipher = AES.new(self.key, AES.MODE_ECB)
        
        # Pad data using PKCS7
        padded_data = pad(data.encode('utf-8'), self.block_size, style='pkcs7')
        
        # Encrypt the data
        encrypted_bytes = cipher.encrypt(padded_data)
        
        # Convert to Base64 string like CryptoJS does
        encrypted_b64 = base64.b64encode(encrypted_bytes).decode('utf-8')
        
        return encrypted_b64
    
    def decrypt(self, encrypted_data):
        # Create AES cipher in ECB mode
        cipher = AES.new(self.key, AES.MODE_ECB)
        
        # Decode Base64 string
        encrypted_bytes = base64.b64decode(encrypted_data)
        
        # Decrypt the data
        decrypted_padded = cipher.decrypt(encrypted_bytes)
        
        # Unpad the data using PKCS7
        decrypted_data = unpad(decrypted_padded, self.block_size, style='pkcs7')
        
        return decrypted_data.decode('utf-8')

# 使用示例
if __name__ == "__main__":
    key = "bSRRwjoAoGW2dX6w"
    data = "^$HongXiu245#Qaf"
    
    aes = AESCipher(key)
    
    # 加密
    encrypted = aes.encrypt(data)
    print(f"Encrypted: {encrypted}")
    
    # 解密
    decrypted = aes.decrypt(encrypted)
    print(f"Decrypted: {decrypted}")