通常,密码在网站上使用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;
}
?>
答案 0 :(得分:2)
正如H2C03所提到的,MD5已被破坏(请参阅评论中的链接。)还有以下因素需要考虑:
执行摘要:即使在使用现代加密算法时,还有很多额外的工作,可疑的好处。
答案 1 :(得分:1)
您正在使用的任何Linux文件系统都可以接受文件名中除目录分隔符之外的任何字符。那你为什么不用其他东西替换任何/字符,或者更好的是,拒绝任何尝试注册包含/(可能还有任何其他非打印字符)的用户名? “哦,但碰撞怎么样?”如果你正在使用散列算法,你就不会消除碰撞的可能性,你只是在减少它的同时增加了无用的计算复杂性。要生成唯一标识符,请使用递增值(如Unix使用“用户ID”)或仅生成uuid:http://php.net/manual/en/function.uniqid.php - 并将该映射存储在数据库中。
维护用户名到ID的映射是其他所有人出于某种原因所做的事情。 :)
答案 2 :(得分:0)
您似乎只使用md5将用户名映射到文件名。没错,它是一种常见的单向散列算法。
我不会用它来加密密码。