我正在開發(fā)小型應(yīng)用程序,但在 python 中解密數(shù)據(jù)時遇到問題。首先,我使用以下代碼在 php 中使用 AES-256-CBC 加密字符串: function EncryptAES($data){ global $KEY; $ivlen = openssl_cipher_iv_length("aes-256-cbc"); $iv = openssl_random_pseudo_bytes($ivlen); $ciphertext = openssl_encrypt($data, "aes-256-cbc", $KEY, NULL, $iv); return $ciphertext; }現(xiàn)在 openssl_encrypt 返回 base64 字符串(因為我使用NULL作為第四個變量)之后我嘗試在 python 中解密它,但它只返回字符串的最后一部分。這是python代碼:BS = 16pad = lambda s: s + (BS - len(s) % BS) * chr(BS - len(s) % BS)unpad = lambda s : s[0:-s[-1]]class AESCipher: def __init__( self, key ): self.key = hashlib.sha256(key.encode('utf-8')).digest() def decrypt( self, enc ): enc = base64.b64decode(enc) iv = enc[:16] cipher = AES.new(self.key, AES.MODE_CBC, iv ) return unpad(cipher.decrypt( enc[16:] ))def Decrypt(data): cipher = AESCipher(KEY) decrypted = cipher.decrypt(data).decode('UTF-8') return decrypted當(dāng)然KEY變量與服務(wù)器上的相同?,F(xiàn)在,在使用加密數(shù)據(jù)運行Decrypt()函數(shù)后,它只返回解密字符串的一部分。
1 回答

叮當(dāng)貓咪
TA貢獻1776條經(jīng)驗 獲得超12個贊
好的,問題解決了!對于任何想知道的人,您需要在 php.ini 中預(yù)先附加 IV。默認的 openssl_encrypt 不添加它。
這是代碼:
$ciphertext = openssl_encrypt($data, "aes-256-cbc", $KEY, OPENSSL_RAW_DATA, $iv);
$DATA = base64_encode($iv.$ciphertext);
- 1 回答
- 0 關(guān)注
- 119 瀏覽
添加回答
舉報
0/150
提交
取消