import base64 import sys from cryptography.hazmat.primitives.ciphers import Cipher, algorithms, modes from cryptography.hazmat.primitives import padding from cryptography.hazmat.backends import default_backend AES_KEY = b"KeLy8g7qjmnbgWP1" # 16 bytes = AES-128 contents = [ "HOmbh7KuceD2H18yBv2Hh8Wo+yZVzYtFBkY3J3eo1Pnyu0jacX6mgzwzbPzTC4KdHQia8sK5T0jfKnHPGnH5Cqc8Y+bgzN2iPXoNvgDX4OEtuyoCa+R7HknO7dLcWWPKN7Lr28x4fteCEw8YolioaFDHoZkpKla51b0qutO5wUMcfCYkg/lw8cOPB2jJwjqS1Y0YL01zaUgu24ZJHC7SwldSNtD++IgipCZtItTfgS1NmN7Qs/O/mUqox+x1AJb345vm5qhg6Q/5Bp9zXyWtn41i255CfPaW+gcqUqA248eF1BZrnzF3IkrDgysaFx/38nDYPByPO2rznmygwjjq00yhMWTHe3cKu2h3OjZvMuzuBfzE7CQwcx59/UQPBs0Fig9EPqQwHQeCRSvl1tYPm+rqlwlC+l3s3rYDaWLa3WgGrN+3HwgTGdZmJV3qajvvhxKT/BZN1zl7EfMHpu52CtM0+yrnbqWEP9heVnNJ6a8=", "HOmbh7KuceD2H18yBv2Hh8Wo+yZVzYtFBkY3J3eo1Pnyu0jacX6mgzwzbPzTC4KdHQia8sK5T0jfKnHPGnH5Cqc8Y+bgzN2iPXoNvgDX4OEtuyoCa+R7HknO7dLcWWPKN7Lr28x4fteCEw8YolioaO39sVqYiFSEGMa11fUhPPgq7Kx6u3SnVsiRD5ZMgqi1Nn9qBND01zsAC6WBb+/XbOYoUbMBAtwhHrzyZPBnL0emWpKPOcyU9Wr0RQbfgXkuEWAl+RM4Son1LM0wZh18aGmXfQY2lMvj/qugOXwRCadmBIeHQwkk3nkE0w67Fqn3532zCdf2GhAFMHt5jV0D3w==", "HOmbh7KuceD2H18yBv2Hh8Wo+yZVzYtFBkY3J3eo1Pnyu0jacX6mgzwzwzbPzTC4KdHQia8sK5T0jfKnHPGnH5Cqc8Y+bgzN2iPXoNvgDX4OEtuyoCa+R7HknO7dLcWWPKN7Lr28x4fteCEw8YolioaDTUtiqVaipMPgSYqyEJJfK20PAzpQq4+V2Z6ppHMLRZ+H3TdNdtJPU8lkSbz4uZ02wH9SUonvWhXZOoddgLsakqnF2dB/Zq3M3Qb27LD6LoaZxOaJm+ry6K14diT5soLLhQiGFP8rBeCQ5ZdG2YlTgNPZG0+eKcB0T4sq8lvLtVYU0MLE+hWDcyuNfNYS+RNss0V6e9m1JkoIVq1A8mlr3DnWZHa1QZrnTEj59HVofAI1uKreMp/cx0VHntx0T4jzzalxfnpMi81J7OHnmzK3sb4yX9xuLVQoanyHgKoHmXUsByKtRRallEmVm7ImQb5Ybd4IfMU5ljdK7BoXv1cAeqYsEXBmlXm1bcYvzEWh7e" ] def try_decrypt(ciphertext_b64, key, mode_name, iv=None): try: ct = base64.b64decode(ciphertext_b64) if mode_name == "ECB": cipher = Cipher(algorithms.AES(key), modes.ECB(), backend=default_backend()) elif mode_name == "CBC": cipher = Cipher(algorithms.AES(key), modes.CBC(iv), backend=default_backend()) else: return None decryptor = cipher.decryptor() pt = decryptor.update(ct) + decryptor.finalize() # Try PKCS7 unpad unpadder = padding.PKCS7(128).unpadder() pt = unpadder.update(pt) + unpadder.finalize() return pt.decode("utf-8") except Exception as e: return None for i, ct_b64 in enumerate(contents, 1): print(f"\n========== Payload {i} ==========") # ECB result = try_decrypt(ct_b64, AES_KEY, "ECB") if result: print(f"[AES-128-ECB]\n{result}\n") continue # CBC with common IVs ivs = { "key as IV": AES_KEY, "zeros": b"\x00" * 16, } # Maybe IV is first 16 bytes of ciphertext ct_bytes = base64.b64decode(ct_b64) if len(ct_bytes) >= 16: ivs["first 16 bytes of cipher"] = ct_bytes[:16] found = False for iv_name, iv in ivs.items(): result = try_decrypt(ct_b64, AES_KEY, "CBC", iv) if result: print(f"[AES-128-CBC, IV={iv_name}]\n{result}\n") found = True break if not found: print("[尝试失败] ECB 和常见 CBC IV 均无法解密,可能需要其他算法或参数。")