2017-05-11 65 views
1

我搜索瞭如何正確使用openssl_encrypt,並發現了幾個stackoverflow問題和答案。但是,恐怕我無法讓它工作。openssl_encrypt不起作用,並沒有提供任何錯誤?

我當前的代碼如下所示:

$encryption_key = openssl_random_pseudo_bytes(32); 
$iv = openssl_random_pseudo_bytes(32); 
$encrypted = openssl_encrypt($data, 'AES-256-CTR', $encryption_key, 0, $iv); 
$error = openssl_error_string(); 
var_dump($encrypted, $error); 

var_dump只是給了我bool(false) bool(false)。它不起作用,我沒有得到任何錯誤。

任何人都可以幫到我嗎?

編輯:我不知道究竟是什麼問題,但顯然使用AES-256-CTR無法在系統上工作。使用以上代碼的AES-256-CBC工作得很好...

回答

0

它不會給出錯誤,因爲您在PHP中忘記了enable error reporting。如果你沒有,你會看到:

E_WARNING:類型2 - openssl_encrypt():IV傳遞是長32個字節,比由選擇密碼預期的16更長,截斷 - 在第6行

AES是一個塊大小爲128位或16字節的塊密碼。 CTR模式的隨機數(這裏稱爲初始化矢量的IV)必須至多與塊大小一樣長。爲了獲得最佳安全性,最好使用96位或12字節的隨機數。剩下的32位或4字節可以填充零:

$iv = openssl_random_pseudo_bytes(12) . "\0\0\0\0"; 

如果使用CBC模式,那麼你需要使用:

$iv = openssl_random_pseudo_bytes(16); 
相關問題