我试图使用一种真正强大的散列算法,并在PHP编码字符串中输出特殊字符。目前,我使用的是hash_pbkdf2,据我所知,它是目前最安全的散列形式,但它不输出只有大写和小写的特殊字符的字符串。是否有任何方法对其进行修改,或者是否有另一种算法可以更好地工作?也许,如果我将其与另一种加密算法相结合,然后将hash_pbkdf2的输出进行加密,并将其加密到具有特殊字符的东西?
发布于 2015-09-03 06:08:17
如果您使用它来散列密码来存储密码,则password_hash() (http://php.net/manual/en/function.password-hash.php)或crypt() (http://php.net/manual/en/function.crypt.php)更适合
发布于 2015-09-03 07:40:16
默认情况下,hash_pbkdf2()输出十六进制编码的结果。您可以传入一个true作为第六个函数参数,以便接收原始二进制输出,但随后得到不可打印的字符。
如果您对只获取可打印字符感兴趣,可以通过将基从16 (十六进制)更改为94 (所有可打印的ASCII字符)来对结果进行编码。这是一个示例代码。
发布于 2015-09-03 06:09:52
你可以用这个:
$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 );
}https://stackoverflow.com/questions/32367961
复制相似问题