2017-02-28 42 views
0

我用下面的方法對數據進行解密,轉換PHP腳本的OpenSSL OpenSSL的命令

$clear = openssl_decrypt($data, 'aes-256-cbc', $pass, 0, $iv); 

$iv總是空的,但它的工作原理

但是,當我使用OpenSSL解密相同文件(該數據是base64編碼),

openssl aes-256-cbc -d -a -in encrypted 

輸入查詢密碼後,它說error reading input file,全然奇怪的錯誤

任何想法?

+0

也許您需要添加'-base64'標誌? –

回答

0

在PHP $pass實際上是完整的二進制密鑰。 openssl實用程序需要實際的密碼。您可能想要使用

openssl aes-256-cbc -d -a -in encrypted -K <hex-encoded key> -nosalt -iv 00000000000000000000000000000000 
+0

我試過openssl 1.1,openssl 1.0.2和0.9.8,它們都沒有'-noiv'命令行選項 – daisy

+0

$ pass是一個用戶輸入,例如'abcdefg',所以PHP將它轉換爲二進制密鑰? – daisy

+0

它可能默默地用0x00字節填充它,直到密鑰有256位。在你的情況'abcdefg \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0 \ 0'。 –