簡體   English   中英

使用phpseclib加密的數據無法使用openssl解密

[英]Data encrypted with phpseclib cannot be decrypted using openssl

我正在使用phpseclib使用隨機密鑰對json文件的內容進行編碼,如下所示:

$plainkey = openssl_random_pseudo_bytes(32); 
$iv = openssl_random_pseudo_bytes(16);

$payload_plain = file_get_contents("file.json");

$cipher = new Crypt_AES(CRYPT_AES_MODE_CBC);
$cipher->setKeyLength(256);
$cipher->setKey($plainkey);
$cipher->setIV($iv);

$enc_payload = $cipher->encrypt($payload_plain);

此時, $enc_payload包含密文,並按預期方式在其上調用$cipher->decode返回純文本。 到現在為止還挺好。

當我將此加密數據寫入文件,然后嘗試使用openssl使用以下命令將其解密時,就會出現問題:

openssl enc -d -aes-256-cbc -iv 17741abad138acc10ab340aaa7c4b790 -K d96ab4a30d73313d4c525844fce61d9f925e119cf178761b27ad0deab92a32bf -in encrypted.txt -out plain.txt

從而通過對上面腳本中獲得的隨機字節值使用bin2hex獲得-iv和-K的值。

運行該命令給我一個錯誤, plain.txt包含原始json字符串的一半正確/一半加擾的版本。 錯誤:

bad decrypt
13124:error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length:.\crypto\evp\evp_enc.c:323:

我想念什么? 我在想,也許我在鍵/ iv上使用bin2hex的那部分是不正確的,但是我嘗試直接使用字節字符串而沒有任何成功。 這通常如何完成? 還是我缺少明顯的東西?

謝謝

對我來說很好。 我的代碼(改編自您的代碼):

<?php
include('Crypt/AES.php');

$plainkey = pack('H*', 'd96ab4a30d73313d4c525844fce61d9f925e119cf178761b27ad0deab92a32bf'); 
$iv = pack('H*', '17741abad138acc10ab340aaa7c4b790');

$payload_plain = file_get_contents('plaintext.txt');

$cipher = new Crypt_AES(CRYPT_AES_MODE_CBC);
$cipher->setKeyLength(256);
$cipher->setKey($plainkey);
$cipher->setIV($iv);

$enc_payload = $cipher->encrypt($payload_plain);

file_put_contents('ciphertext.txt', $enc_payload);

我用這個解密:

openssl enc -d -aes-256-cbc -iv 17741abad138acc10ab340aaa7c4b790 -K d96ab4a30d73313d4c525844fce61d9f925e119cf178761b27ad0deab92a32bf -nosalt -p -in encrypted.txt -out plaintext.txt

區別在於我有-p-nosalt -p只是打印出密鑰,但也許-nosalt是您所需要的。

也許問題比這還簡單。 在您發布的代碼段中,您沒有在任何地方回顯或保存密鑰/ iv。 也許您沒有輸出正確的值。

我從http://phpseclib.sourceforge.net/interop.html#aes,p1openssl,p2phpseclib獲得了OpenSSL參數

暫無
暫無

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

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