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