2013-08-25 2 views
1

Я использую Yii CSecurityManager для шифрования пароля:Yii шифровать и дешифровать пароль

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

* ТЕСТ является строка для шифрования и 1 ключ.

, но когда я тестирую перед расшифровкой, я обнаружил, что значение продолжает меняться.

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

Я полагаюсь на это значение в другой части моего заявления ... Я порылся в пароле ENCRYPT я вижу, что это на самом деле случайно:

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; 
} 

поэтому мой вопрос заключается в том могу ли я шифровать на основе ключа и получать одинаковое значение каждый раз?

спасибо, Дэнни

+0

Почему вы хотите шифровать пароли? – JimL

+0

это часть моего приложения ... это не только пароль, и мне нужна эта функция –

+1

Но почему? Это не имеет смысла, даже если вам нужно зашифровать некоторые данные, нет необходимости в том, чтобы каждый раз генерировать один и тот же вывод. И пароли не должны быть зашифрованы, они должны быть хэшированы. – JimL

ответ

2

В принципе, вы можете создать тот же зашифрованный текст каждый раз. Просто используйте статический IV, и вы бы это сделали. Это, однако, означает, что вы будете утечка информации о паролях. Идентичные пароли будут иметь одинаковый шифрованный текст для разных пользователей.

Если вы действительно хотите иметь один и тот же шифротекст, добавьте первые 16 байтов хэша над именем пользователя в пароль и зашифруйте с нулевым IV. Обратите внимание, что это все равно может привести к утечке информации о пароле во времени.

Обратите внимание, что использование значения зашифрованного текста для других средств, кроме хранения простого текста, является очень плохой идеей в целом.

+0

Это именно то, что я искал !! не могли бы вы привести пример использования нулевого IV ... Я не смог найти способ сделать это, поскольку это случайный случай в Yii –

+0

@DannyValariola Ну, вы просто сгенерируете этот массив байтов из 16 байтов, оцененных 00, возможно, используя 'mcrypt_enc_get_iv_size', вместо этого использования 'mcrypt_create_iv'. –

+0

Я заполнил 16Byte и создал ключ шифрования, который зависит от ресурсов (согласно вашим советам), но я не понимаю, как вы можете изменить $ this-> securityManager-> зашифровать его часть фреймворка .... или вы должны расширить CSecurityManager? –

Смежные вопросы