簡體   English   中英

解密 iv = 0 的 aes-256-cbc 編碼文件

[英]Decrypt aes-256-cbc encoded file with iv = 0

我有一個使用aes-256-cbd方法加密的input.DAT文件。 我想使用 php 解密文件。當我從命令行執行以下命令時,文件已成功解密。

aes-256-cbc -d -in input.DAT -out output.TXT -K 00478c54c432b3ca9a98d4a750ea874eba07410ae61834cd5aaac7505f1f5ad4 -iv 0

但是當我嘗試使用 php 使用該方法解密文件時

openssl_decrypt($data, AES_256_CBC, $encryption_key, 0, 0);

它給了我這個錯誤: openssl_decrypt(): IV passed is only 1 bytes long, cipher expects an IV of precisely 16 bytes, padding with \0

如何使用 php 而不是命令行解密文件?

OpenSSL 語句從input.DAT加載密文。 由於-a-base64選項均未設置,因此讀取原始二進制數據。 讀取的數據在 CBC 模式下使用 AES-256 進行解密。
00478c54c432b3ca9a98d4a750ea874eba07410ae61834cd5aaac7505f1f5ad4的十六進制解碼用作密鑰,零 IV(所有 16 個字節均為0x00 )用作 IV。

使用openssl_decrypt()對 PHP 進行解密的可能實現是:

// Load ciphertext
$file = '<input.DAT path>';
$data = file_get_contents($file);

// Decrypt
$key = hex2bin('00478c54c432b3ca9a98d4a750ea874eba07410ae61834cd5aaac7505f1f5ad4');
$iv = hex2bin('00000000000000000000000000000000');
$decrypted = openssl_decrypt($data, 'aes-256-cbc', $key, OPENSSL_RAW_DATA, $iv);
print($decrypted . PHP_EOL);

請注意, openssl_encrypt()默認生成一個 Base64 編碼的密文,而openssl_decrypt()相應地期望一個 Base64 編碼的密文。 由於此處讀取的密文是原始的,即不是 Base64 編碼的,因此必須設置OPENSSL_RAW_DATA標志。 此外,雙方默認使用 PKCS7 作為填充。

請記住,static IV(如零 IV)通常是不安全的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM