1

パスワードの暗号化に Yii CSecurityManager を使用しています。

$this->securityManager->encrypt('TEST', '1');

*TEST は暗号化する文字列で、1 はキーです。

しかし、復号化する前にテストすると、値が変化し続けることがわかりました。

for ($index = 0; $index < 10; $index++) {
        $EncPassword = $this->securityManager->encrypt('TEST', '1');
        echo $EncPassword;
    }

私はアプリケーションの別の部分でこの値に依存しています...暗号化パスワードを掘り下げたところ、実際にはランダムであることがわかりました:

public function encrypt($data,$key=null)
{
    $module=$this->openCryptModule();
    $key=$this->substr($key===null ? md5($this->getEncryptionKey()) : $key,0,mcrypt_enc_get_key_size($module));
    srand();
    $iv=mcrypt_create_iv(mcrypt_enc_get_iv_size($module), MCRYPT_RAND);
    mcrypt_generic_init($module,$key,$iv);
    $encrypted=$iv.mcrypt_generic($module,$data);
    mcrypt_generic_deinit($module);
    mcrypt_module_close($module);
    return $encrypted;
}

私の質問は、キーに基づいて暗号化し、毎回同じ値を取得するにはどうすればよいですか?

ありがとう、ダニー

4

1 に答える 1

2

原則として、毎回同じ暗号文を作成できます。静的 IV を使用するだけで、それを達成できます。ただし、パスワードに関する情報が漏洩することになります。同一のパスワードは、異なるユーザーに対して同じ暗号文を持ちます。

本当に同じ暗号文が必要な場合は、ユーザー名のハッシュの最初の 16 バイトをパスワードに追加し、ゼロ IV で暗号化します。これでも、パスワードに関する情報が少し漏れる可能性があることに注意してください。

平文の保存以外の目的で暗号文の値を使用することは、一般的に非常に悪い考えであることに注意してください。

于 2013-08-26T07:58:11.290 に答える