2016-11-15 17 views
0

誰かがAESで私を助けることができますか?私はデータの暗号化と解読にphpseclibを使用しましたが、データを解読できないようです。以下の私のコードを見てください。私は他のページのデータを解読したかったのです。前もって感謝します!phpseclibを使用したAES暗号化

$base64 = "AAA"; 

$cipher = new Crypt_AES(); 
$cipher->setKey('QrzMwvH7zmVn5Kzu%ks8GSTWzyLJu#Ck!^f%-UpXefuYBhv^%qLwYsuPx0d&zmNo'); 
$cipher->setIV(crypt_random_string($cipher->getBlockLength() >> 3)); 
echo $encrypted = $cipher->encrypt($base64); 


$cipher = new Crypt_AES(); 
$cipher->setKey('QrzMwvH7zmVn5Kzu%ks8GSTWzyLJu#Ck!^f%-UpXefuYBhv^%qLwYsuPx0d&zmNo'); 
$cipher->setIV(crypt_random_string($cipher->getBlockLength() >> 3)); 
echo 'decrypted:'. $cipher->decrypt($encrypted); 

結果

% NKy0k:解読さ:

更新:これはこれは、のリストを維持するために必要だと

を意味しています初期化ベクトルは、データを復号化するために?

更新:

私はルーメンフレームワークを使うことにしました。ルーメンには、IVやその他の技術的な知識を扱う組み込みの暗号化機能があります。ご協力いただきありがとうございます!

答えて

-1

ライブラリを使用しています。なぜopenssl_encrypt()を使用しないのですか?

openssl_encrypt($text, $method, $key); 

パラメータ:

  1. $text:暗号化したいテキストを暗号化するための

  2. $method:暗号化に使用する方法。私はほとんどAES-256-ECBを使用します。
  3. $key:暗号化に使用するキー。

例:

$data = openssl_encrypt('Hello', 'AES-256-ECB' 'test'); 

復号化:

openssl_decrypt($encrypted_text, $method, $key); 

パラメータ:

  1. $encrypted_text:暗号化されたテキスト。
  2. $method:解読に使用する方法。
  3. $key:テキストを復号化するためのキー。

例:

openssl_decrypt($data, 'AES-256-ECB', 'test'); 
+0

ライブラリを使用する前に、このライブラリを使用しようとしました。私は、それが何であるかの手がかりを持たない初期化ベクトルが必要であるというエラー/警告が発生しました。 – bwaaaaaa

+0

[ここ](http://creepergaming.net/encrypt)には非常に良い例がありますopensslを使用します –

+3

@bwaaaaaaこれは、あなたが暗号を勉強するために休憩を取る必要があることを意味します。暗号化と復号化の作業を行うだけでは、適切に使用されていない限りセキュリティは提供されません。 – zaph

0

あなたはどちらの場合も、異なるIVを使用している - あなたは同じIVを使用する必要があります。試してみてください:

$base64 = "AAA"; 
$iv = crypt_random_string($cipher->getBlockLength() >> 3); 

$cipher = new Crypt_AES(); 
$cipher->setKey('QrzMwvH7zmVn5Kzu%ks8GSTWzyLJu#Ck!^f%-UpXefuYBhv^%qLwYsuPx0d&zmNo'); 
$cipher->setIV($iv); 
echo $encrypted = $cipher->encrypt($base64); 


$cipher = new Crypt_AES(); 
$cipher->setKey('QrzMwvH7zmVn5Kzu%ks8GSTWzyLJu#Ck!^f%-UpXefuYBhv^%qLwYsuPx0d&zmNo'); 
$cipher->setIV($iv); 
echo 'decrypted:'. $cipher->decrypt($encrypted); 
+1

静的IVを使用すると、セキュリティに関して問題はありますか?お返事をありがとうございます。 – bwaaaaaa

+0

静的なIVを使用しないでください。同じメッセージを再度暗号化すると、暗号化されたデータは同じになり、情報が漏洩するからです。 – zaph

+0

@zaphありがとう!私は同意し、私はこれについても私の研究を行った。また、異なるライブラリ/プラグインを比較しました.IVが動的であれば最適です。動的にするのは難しいが、より安全です。とにかく、私はルーメンフレームワークを使うことに決めました。内蔵の暗号化機能を備えています。だからこそ深く掘り下げる必要はありません。 – bwaaaaaa

0

ランダムに生成されたIVを暗号化に使用してください。 IVは秘密である必要はないので、暗号化されたデータの先頭にIVを付けるだけです。その後、IVを復号化することができる。

暗号化キー'QrzMwvH7zmVn5Kzu%ks8GSTWzyLJu#Ck!^f%-UpXefuYBhv^%qLwYsuPx0d&zmNo'は512ビット(64バイト)ですが、AESキーサイズは128,192,256の3つのみです。

関連する問題