哈希密码和带特殊字符的返回字符串

时间:2015-09-03 05:57:38

标签: php hash special-characters pbkdf2

我正在尝试使用非常强大的散列算法,并在PHP中的编码字符串中输出特殊字符。目前我使用的是hash_pbkdf2,我理解这是目前最安全的散列形式,但它不会输出一个只有大写和小写的特殊字符的字符串。有没有办法修改它来做这样的,还是有另一种算法可以更好地工作?也许如果我将其与另一个加密算法结合起来,然后将其作为hash_pbkdf2的输出并将其加密为具有特殊字符的东西?

3 个答案:

答案 0 :(得分:1)

如果您使用它来散列密码来存储它们,则password_hash()(http://php.net/manual/en/function.password-hash.php)或crypt()(http://php.net/manual/en/function.crypt.php)更适合

答案 1 :(得分:0)

hash_pbkdf2()默认输出十六进制编码结果。您可以传入true作为第六个函数参数,以便接收原始二进制输出,但随后会得到不可打印的字符。

如果您只想获取可打印字符,可以尝试通过将基数从16(十六进制)更改为94(所有可打印的ASCII字符)来对结果进行编码。这是一个example code

答案 2 :(得分:-2)

你可以用这个:

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