2017-05-11 12 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(): - 6行目にIVが渡さは切り捨て、長い選択された暗号が期待する16以上ある長い32のバイトです

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); 
関連する問題