首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >什么是md5()?

什么是md5()?
EN

Stack Overflow用户
提问于 2018-05-10 06:10:02
回答 2查看 0关注 0票数 0

简单的PHP登录系统建议使用md5()加密密码。

我自己去尝试一下:

代码语言:javascript
复制
$pass = "Trufa";
$enc = md5($pass);

echo $enc; #will echo 06cb51ce0a9893ec1d2dce07ba5ba710

尽管知道md5()可能不是最强的加密方式,但任何总是产生相同结果的东西都可以被反向设计。

那么用md5()或其他方法加密某些东西有什么意义?

所以现在的实际问题是:

  1. 密码加密如何工作?

这种方法是否会将安全性的任何安全性添加到真实环境中?

代码语言:javascript
复制
$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()密码。

EN

回答 2

Stack Overflow用户

发布于 2018-05-10 14:47:30

一些示例代码(例如registration.php):

代码语言:javascript
复制
$unique_salt = hash('md5', microtime()); 
$password = hash('md5', $_POST['password'].'raNdoMStAticSaltHere'.$unique_salt);

有一个static salt存储在.php文件中的密码对所有密码有效。然后,在注册执行时,将为该特定密码生成一个独特的哈希值。

如何检查login.php上密码的有效性,例如:

代码语言:javascript
复制
$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]);
}
票数 0
EN

Stack Overflow用户

发布于 2018-05-10 16:01:32

哈希是一个函数f,使得v不能从f(v)容易地确定。

使用散列进行身份验证的重点在于(或者看到散列值的人)没有任何知道密码的可行方法(理论上讲)。但是,仍然可以验证用户是否知道他的密码。(基本上,用户证明他知道v使得f(v)是存储的散列)。

简单散列(除了弱散列函数)的弱点是人们可以编译密码表及其对应的散列表并使用它们(有效地)获得散列函数的反函数。Salting可以防止这种情况发生,因为这样会控制散列输入值的一部分,因此必须为特定的Salt编译表。

因此,实际上,存储salt和散列值,并通过散列Salt和密码的组合并将其与散列值进行比较来进行验证。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/-100008445

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档