从Python-AES-pycryptodomex解密PHP-openssl中的AES

2024-04-19 21:04:15 发布

您现在位置:Python中文网/ 问答频道 /正文

BS = 16
pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)
unpad = lambda s: s[:-ord(s[len(s) - 1:])]

base64pad = lambda s: s + '=' * (4 - len(s) % 4)
base64unpad = lambda s: s.rstrip("=")
encrypt_key = 'BKHlhb899Y09olUa' #Needs to be 16 chars

def encrypt(key, msg):
    iv = Random.new().read(BS)
    cipher = AES.new(key.encode("utf8"), AES.MODE_CFB, iv)
    encrypted_msg = cipher.encrypt(pad(str(msg)).encode("utf8"))
    return base64unpad(urlsafe_b64encode(iv + encrypted_msg).decode("utf8"))

def decrypt(key, msg):
    decoded_msg = urlsafe_b64decode(base64pad(msg))
    iv = decoded_msg[:BS]
    encrypted_msg = decoded_msg[BS:] 
    cipher = AES.new(key.encode("utf8"), AES.MODE_CFB, iv)
    return unpad(cipher.decrypt(encrypted_msg))

Encrypted = encrypt(encrypt_key, "1234567890123456")
print(Encrypted)
Decrypted = decrypt(encrypt_key, Encrypted)
print(Decrypted)

上面是我在python3中使用的代码,它运行良好。 但我无法用PHP解密加密文本。 我的当前代码:

$encryptedText = "wIR0ElYIkuKckQQ-0KikhLuXjkL2vTAaOtaO7WyVp2A2JE5FTWZf__ZgCmUQ2Lre";
$key = "BKHlhb899Y09olUa";

echo openssl_decrypt(substr(base64_decode($encryptedText), 16), "AES-128-CFB", $key, OPENSSL_RAW_DATA, substr(base64_decode($encryptedText), 0, 16))."<br>";

Tags: lambdakeynewlenbsmsgutf8encrypted