имеем
$plaintext = 'Мой текст';
$password = 'Мой пароль';
$method = 'aes-256-cbc';
$key = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12]);
$iv = chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0) . chr(0x0);
$encrypted = base64_encode(openssl_encrypt($plaintext, $method, $key, OPENSSL_RAW_DATA, $iv));
$decrypted = openssl_decrypt(base64_decode($encrypted), $method, $key, OPENSSL_RAW_DATA, $iv);
echo 'encrypted to: ' . $encrypted . "<br>";
echo 'decrypted to: ' . $decrypted . "";
Вроде все норм. Зашифровали, зашифрованное расшифровали. Решил страницу, с результатами по обновлять. Оказывается encrypted - всегда разный, но и черт с ним. Ради интереса взял зашифрованное сообщение, и попытался расшифровать
$decrypted = openssl_decrypt(base64_decode('3ijR8qNwEKezwrnjZk1kM7cBuR0JLhU+e6g+UDkEpPc='), $method, $key, OPENSSL_RAW_DATA, $iv);
И тут начинается веселье, в место расшифрованного сообщения - пусто
Господа, прошу подсказать. Правилен ли пример, правильно ли шифрую, и почему при расшифровке уже зашифрованного сообщения ни чего не происходит ( точнее получается ПУСТО )
p.s. ест-но попробовал и с двойными кавычками, что бы исключить вероятность ошибки - результат тот же
password_hash
генерирует случайную соль, и помещает ее вначало хеша. Поэтому у вас каждый раз другой ключ, а значит и другой шифротекст.
Вы запускаете код снова, генерируется новый ключ, и при расшифровке получается мусор.
Можете попробовать вот так:
$key = password_hash($password, PASSWORD_BCRYPT, ['cost' => 12, 'salt' => 'your-salt']);
Тогда ключи будут одинаковыми. Но явное указание соли в password_hash
объявлено устаревшим.
Вы можете напрямую передавать ваш пароль, и openssl
сгенерирует с него ключ:
$encrypted = base64_encode(openssl_encrypt($plaintext, $method, $password, OPENSSL_RAW_DATA, $iv));
$decrypted = openssl_decrypt(base64_decode($encrypted), $method, $password, OPENSSL_RAW_DATA, $iv);
Еще одно примечание: использование постоянного IV строго нерекомендуется.
Айфон мало держит заряд, разбираемся с проблемой вместе с AppLab
Перевод документов на английский язык: Важность и ключевые аспекты
Тобишь нужно скрыть верхушку у самописного диалогового окна (там где заголовок, кнопка выхода)При этом такая конструкция при инициализации...
В этой статье приведена следующая информация: