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

Php 哈希密码和带有特殊字符的返回字符串,php,hash,special-characters,pbkdf2,Php,Hash,Special Characters,Pbkdf2,我正在尝试使用一种非常强大的哈希算法,并在PHP中输出编码字符串中的特殊字符。目前,我正在使用hash_pbkdf2,据我所知,这是目前最安全的哈希形式,但它不会输出只有大写和小写字符的字符串。是否有任何方法可以修改它来实现这一点,或者是否有其他算法可以更好地工作?也许如果我将其与另一种加密算法结合使用,该算法将获取哈希值的输出,并将其加密为具有特殊字符的内容?如果您使用它来哈希密码以存储它们,则密码\u hash()或crypt()更合适您可以使用以下方法: $input = "YourPas

我正在尝试使用一种非常强大的哈希算法,并在PHP中输出编码字符串中的特殊字符。目前,我正在使用hash_pbkdf2,据我所知,这是目前最安全的哈希形式,但它不会输出只有大写和小写字符的字符串。是否有任何方法可以修改它来实现这一点,或者是否有其他算法可以更好地工作?也许如果我将其与另一种加密算法结合使用,该算法将获取哈希值的输出,并将其加密为具有特殊字符的内容?

如果您使用它来哈希密码以存储它们,则密码\u hash()或crypt()更合适

您可以使用以下方法:

$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 );
}
$input=“yourspassword”;
$EncryptionKey=“sFdhgdvDRg4353FDgdfg”;
$encrypted=EncryptIt($input);
echo“加密:”。EncryptIt($input)。“
”; 回声“解密:”。解密(加密); 函数EncryptIt($q){ $cryptKey=$EncryptionKey; $qEncoded=base64_encode(mcrypt_encrypt(mcrypt_RIJNDAEL_256,md5($cryptKey))、$q,mcrypt_MODE_CBC,md5(md5($cryptKey)); 报税表(已编码)(元);; } 函数解密它($q){ $cryptKey=$EncryptionKey; $QDecode=rtrim(mcrypt_解密(mcrypt_RIJNDAEL_256,md5($cryptKey),base64_解码($q),mcrypt_模式CBC,md5(md5($cryptKey)),“\0”); 回报(qDecoded美元); }
默认情况下,hash_pbkdf2()输出十六进制编码的结果。您可以传入一个
true
作为第六个函数参数,以接收原始二进制输出,但随后会得到无法打印的字符


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

对不起,这是设计上不够安全的,我不想要可以解密的东西。这是加密,不是散列,密码非常糟糕。永远不要这样做。将新的密码哈希API与
Password\u DEFAULT
一起使用,这样它将始终使用最强大的可用算法。@CharlotteDunois但是如果算法发生变化,那么会不会一切都停止工作呢?例如,我已将编码的passwd存储在数据库中,然后我尝试检查它,并且安全算法已更改,它将输出不同的结果否?否,使用的算法和成本保存在哈希中,但在完成哈希过程之前,我不会与哈希进行比较。ie第一次密码->哈希->哈希PWD1,第二次密码->哈希->哈希PWD2。如果我对hashedpwd1和hashedpwd2执行str_cmp,它们将返回不同的结果?谢谢,但我决定使用php中的password_hash函数