Я пытаюсь использовать алгоритм хеширования, который действительно сильный и выводит специальные символы в закодированной строке в PHP. В настоящее время я использую hash_pbkdf2, который, как я понимаю, является наиболее безопасной формой хеширования на данный момент, но он не выводит строку со специальными символами только в верхнем и нижнем регистре. Есть ли способ изменить его, чтобы сделать так, или есть другой алгоритм, который будет работать лучше? Может быть, если бы я объединил это с другим алгоритмом шифрования, который бы затем взял вывод hash_pbkdf2 и зашифровал бы его чем-то специальным символом?
Если вы используете его для хеширования паролей, чтобы хранить их password_hash () (http://php.net/manual/en/function.password-hash.php) или склеп () (http://php.net/manual/en/function.crypt.php) лучше подходят
hash_pbkdf2()
выводит шестнадцатеричный кодированный результат по умолчанию. Вы можете пройти в true
в качестве шестого аргумента функции, чтобы получить необработанный двоичный вывод, но затем вы получите непечатаемые символы.
Если вы заинтересованы в получении только печатных символов, вы можете попробовать закодировать результат, изменив основание с 16 (шестнадцатеричное) на 94 (все печатные символы ASCII). Вот пример кода.
Вы можете использовать это:
$input = "YourPassword";
$EncryptionKey = "sFdhgdvDRg4353FDgdfg";
$encrypted = EncryptIt( $input);
echo "Encrypted: " . EncryptIt( $input ) . "<br/>";
echo "Decrypted: ". DecryptIt( $encrypted );
function EncryptIt( $q ) {
$cryptKey = $EncryptionKey;
$qEncoded = base64_encode( mcrypt_encrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), $q, MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ) );
return( $qEncoded );
}
function DecryptIt( $q ) {
$cryptKey = $EncryptionKey;
$qDecoded = rtrim( mcrypt_decrypt( MCRYPT_RIJNDAEL_256, md5( $cryptKey ), base64_decode( $q ), MCRYPT_MODE_CBC, md5( md5( $cryptKey ) ) ), "\0");
return( $qDecoded );
}