在网站上,密码通常是用MD5编码的。我也在考虑将用户名编码为MD5中的文件名。我会在基于Linux的服务器上使用PHP。除了在不解密的情况下无法区分之外,用PHP加密文件名到MD5还有什么缺点吗?
<? php
if(isset($_POST['register'])){
$username = md5($_POST['username']);
$email = htmlentities($_POST['email'], ENT_QUOTES|ENT_XML1);
$password = $_POST['password'];
$c_password = $_POST['c_password'];
$xml = new SimpleXMLElement('<user></user>');
$xml->addChild('password', md5($password));
$xml->addChild('email', $email);
$xml->asXML('users/'.$username . '.xml');
header('Location: validate.php');
die;
}
?>发布于 2012-11-14 07:45:01
您正在使用的任何Linux文件系统都可以接受文件名中除目录分隔符以外的任何字符。那么,为什么不将任何/字符替换为其他字符,或者,更好的做法是拒绝任何使用包含/(可能还有其他不可打印字符)的用户名进行注册的尝试?“哦,但是碰撞呢?”如果你使用散列算法,你并没有消除冲突的可能性,你只是减少了它,同时增加了无用的计算复杂性。要生成唯一的标识符,要么使用递增的值(就像Unix对“用户in”所做的那样),要么只生成一个uuid:http://php.net/manual/en/function.uniqid.php -并将该映射存储在数据库中。
维护用户名到is的映射是每个人都要做的事情,这是有原因的。:)
发布于 2012-11-14 06:13:33
正如H2C03提到的,MD5已经崩溃了(参见他在评论中的链接)。还有以下因素需要考虑:
执行摘要:即使使用现代加密算法,也要做大量的额外工作,但收益却令人怀疑。
发布于 2012-11-14 06:31:58
看起来您只是在使用md5将用户名映射到文件名。这没有错,它是一种常见的单向散列算法。
我不会用它来加密密码。
https://stackoverflow.com/questions/13369690
复制相似问题