简单的PHP登录系统建议使用md5()加密密码。
我自己去尝试一下:
$pass = "Trufa";
$enc = md5($pass);
echo $enc; #will echo 06cb51ce0a9893ec1d2dce07ba5ba710
尽管知道md5()可能不是最强的加密方式,但任何总是产生相同结果的东西都可以被反向设计。
那么用md5()或其他方法加密某些东西有什么意义?
所以现在的实际问题是:
这种方法是否会将安全性的任何安全性添加到真实环境中?
$reenc = array(
"h38an",
"n28nu",
"fw08d"
);
$pass = "Trufa";
$enc = chunk_split(md5($pass),5,$reenc[mt_rand(0,count($reenc)-1)]);
echo $enc;
我随机添加了任意字符串($reenc = array()
)到我的md5()密码。
发布于 2018-05-10 14:47:30
一些示例代码(例如registration.php):
$unique_salt = hash('md5', microtime());
$password = hash('md5', $_POST['password'].'raNdoMStAticSaltHere'.$unique_salt);
有一个static salt
存储在.php文件中的密码对所有密码有效。然后,在注册执行时,将为该特定密码生成一个独特的哈希值。
如何检查login.php上密码的有效性,例如:
$user = //random username;
$querysalt = mysql_query("SELECT salt FROM password WHERE username='$user'");
while($salt = mysql_fetch_array($querysalt)) {
$password = hash('md5',
$_POST['userpassword'].'raNdoMStAticSaltHere'.$salt[salt]);
}
发布于 2018-05-10 16:01:32
哈希是一个函数f,使得v不能从f(v)容易地确定。
使用散列进行身份验证的重点在于(或者看到散列值的人)没有任何知道密码的可行方法(理论上讲)。但是,仍然可以验证用户是否知道他的密码。(基本上,用户证明他知道v使得f(v)是存储的散列)。
简单散列(除了弱散列函数)的弱点是人们可以编译密码表及其对应的散列表并使用它们(有效地)获得散列函数的反函数。Salting可以防止这种情况发生,因为这样会控制散列输入值的一部分,因此必须为特定的Salt编译表。
因此,实际上,存储salt和散列值,并通过散列Salt和密码的组合并将其与散列值进行比较来进行验证。
https://stackoverflow.com/questions/-100008445
复制相似问题