Я работаю над небольшим сценарием, который позволит мне хранить относительно безопасную информацию в cookie-файле, чтобы подтвердить логин пользователя без использования сессий. Часть вывода представляет собой зашифрованную соль для использования при генерации hmac_hash с некоторой информацией, хранящейся в cookie, и некоторой информацией о пользователе в базе данных.
Однако после некоторого тестирования я столкнулся с проблемой шифрования / дешифрования строк и получения разных результатов хеширования.
есть:
$str = '123456abcdef';
$hash1 = sha1($str);
$v1 = do_encrypt($str);
$v2 = do_decrypt($v1);
$hash2 = sha1($v2);
и я получаю
$hash1 - d4fbef92af33c1789d9130384a56737d181cc6df
$hash2 - 0d6034f417c2cfe1d60d263101dc0f8354a1216f
но когда я повторяю обе строки, они обе 123456abcdef.
Функция do_encrypt выглядит следующим образом:
function do_encrypt($value) {
$salt = generate_salt();
$td = mcrypt_module_open('rijndael-256', '', 'cbc', '');
mcrypt_generic_init($td, $ek, $salt);
$encrypted_data = mcrypt_generic($td, $value);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return base64_encode($salt.$encrypted_data);
}
Функция do_decrypt:
function do_decrypt($value) {
$data = base64_decode($value);
$salt = substr($data, 0, 32);
$data = substr($data, 32, strlen($data));
$td = mcrypt_module_open('rijndael-256', '', 'cbc', '');
mcrypt_generic_init($td, $ek, $salt);
$decrypted_data = mdecrypt_generic($td, $data);
mcrypt_generic_deinit($td);
mcrypt_module_close($td);
return $decrypted_data;
}
для обеих функций $ ek - это ключ шифрования, извлеченный из другого файла.
Я пытаюсь понять, почему отображаемые символы одинаковы, но фактические переменные разные (в противном случае результаты хеширования будут одинаковыми), и есть ли способ убедиться, что обе строки идентичны для целей хеширования
Спасибо,
Райан.