2016-11-15 14 views
1

弱い暗号化(壊れアルゴリズム)エラー

$skey = "whateveryoulike"; // you can change it 
if(!$value){return false;} 
$text = $value; 
$iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_256, MCRYPT_MODE_ECB); 
$iv = mcrypt_create_iv($iv_size, MCRYPT_DEV_URANDOM); 
$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $skey, $text, MCRYPT_MODE_ECB, $iv); 

を私はPHPを実行したときのものがあるが、私は上のエラーを取得するPCIのためにスキャナをRIPS弱い暗号(アルゴリズムが壊れている)

--> $crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $skey, $text, MCRYPT_MODE_ECB, $iv); 

私はここでどの暗号化を使うべきか指摘できる人はいますか?前もって感謝します。

+0

MCRYPT_MODE_CBCにMCRYPT_MODE_ECBを変更するようにしてください。 –

+0

CBCでもうまくやったけど、結果は同じです... –

+0

mcryptを使用しないのが最善です。今のところ10年近く放棄されています。このため、PHP 7.2では非推奨となり、コアからPECLに削除されます。標準のPKCS#7(néePKCS#5)パディングはサポートされていません。バイナリデータでも使用できない非標準のヌルパディングのみがサポートされています。 mcryptには、2003年にさかのぼる多くの傑出した[バグ](https://sourceforge.net/p/mcrypt/bugs/)があります。代わりに[defuse](https://github.com/defuse/php-encryption)の使用を検討するか、 [RNCryptor](https://github.com/RNCryptor)は、完全なソリューションを提供し、維持管理されており、正しいものです。 – zaph

答えて

1

MCRYPT_RIJNDAEL_256はAESではありませんが、ブロックサイズ256ビットのRijndaelで、256ビットのキーサイズではありません。 RIJNDAEL_128である128ビットのブロックサイズを持つAESを使用することが最善です。

正確なサイズ、長さが16,24または32バイトであることを確認してください。他の機能はキーを拒否したり、何かをパッドしたりします。キー埋め込みの標準はありません。

ECBモードを使用しないでください。それは安全ではありません。ECB modeを参照して、ペンギンまでスクロールしてください。その代わりに、暗号化されたデータにIVを付加して復号化に使用するだけで、ランダムIVのCBCモードを使用します。

mcryptはPKCS#7のパディングをサポートしていません。バイナリデータでも使用できない非標準のヌルパディングのみがサポートされています。

+0

まあ、私は以下を試しましたが、失敗しました:$ crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128、$ skey、$ text、MCRYPT_MODE_CBC、$ iv); –

+0

おそらく、苦情はmcryptが使用されていることに基づいているため、廃止予定です。 – zaph

0

これは最終的に問題を解決:

を:それは

$skey = "whateveryoulikek"; 

から16、24または32

$skey = "whateveryoulike"; 

なければならないので、15から16へのキーの長さを増やす

をして、

から:

$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_256, $skey, $text, MCRYPT_MODE_ECB, $iv); 

へ:

$crypttext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $skey, $text, MCRYPT_MODE_CFB, $iv); 
関連する問題