我最近在PHP上做了很多,并且想要创建我的第一个登录/注册系统。因此,我一直在网上做很多阅读,以找出实现这一目标的最佳方法。我遇到了几个指南,我在一些情况下感到困惑,在开始这条道路之前,我想确定一下。
我的问题是我究竟如何使用河豚?我已经读过如果提供适当的盐,crypt()将自动选择河豚。如果是这样的话,是什么让盐河豚适当?
现在,我有一个脚本,它使用日期和时间制作一个盐,一个随机数,然后哈希为盐。那是否可以与河豚一起使用?
答案 0 :(得分:12)
简而言之:不要自己构建它。使用图书馆。
在PHP 5.5中,将有一个新的API可以让您更轻松地完成此过程。这是RFC for it。
我还在这里为它创建了一个向后兼容的库:password-compat:
$hash = password_hash($password, PASSWORD_BCRYPT);
然后验证:
if (password_verify($password, $hash)) {
/* Valid */
} else {
/* Invalid */
}
如果您想要其他图书馆,请查看phpass
简而言之,不要自己动手。没有必要。只需导入库并完成它......
答案 1 :(得分:6)
查看http://php.net/manual/en/function.crypt.php
如果向下滚动约1/3,则应看到标题:Example #3 Using crypt() with different hash types
。希望这会有所帮助!你的盐应该没问题!
答案 2 :(得分:-3)
尝试这个 - 它未经测试,我只是掀起它来展示如何使用PHP的BLOWFISH算法
<?php
class cipher {
private static $mode = 'MCRYPT_BLOWFISH';
private static $key = 'q!2wsd#45^532dfgTgf56njUhfrthu&^&ygsrwsRRsf';
public static function encrypt($buffer){
$iv = mcrypt_create_iv(mcrypt_get_iv_size(constant(self::$mode), MCRYPT_MODE_ECB), MCRYPT_RAND);
$passcrypt = mcrypt_encrypt(constant(self::$mode), self::$key, $buffer, MCRYPT_MODE_ECB, $iv);
$encode = base64_encode($passcrypt);
return $encode;
}
public static function decrypt($buffer){
$decoded = base64_decode($buffer);
$iv = mcrypt_create_iv(mcrypt_get_iv_size(constant(self::$mode), MCRYPT_MODE_ECB), MCRYPT_RAND);
$decrypted = mcrypt_decrypt(constant(self::$mode), self::$key, $decoded, MCRYPT_MODE_ECB, $iv);
return $decrypted;
}
}
?>
注意!!改变对另一个随机字符串的$ key值!
用法:
要加密:
$ mystring ='一只快速的棕色狐狸跳过懒惰的骆驼'; $ mystring = cipher :: encrypt($ mystring);
解密:
$ mystring = cipher :: decrypt($ myencryptedstring);