用md5加密文件名

时间:2012-11-13 22:07:26

标签: php javascript linux md5 filenames

通常,密码在网站上使用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;
}
?>

3 个答案:

答案 0 :(得分:2)

正如H2C03所提到的,MD5已被破坏(请参阅评论中的链接。)还有以下因素需要考虑:

  1. 任何可以破解用户名的人都可以破解密码,反之亦然,所以你什么都没得到
  2. 这将使编写大量用户管理查询并编写完整的噩梦
  3. 散列密码的原因很有价值,因为(理想情况下)没有办法让明文退出。为了使您的网站正常工作,您需要包含用于将用户名解密为明文的代码,并且已经在您的系统上的黑客,如果他有任何好处,只需在您的解密例程中添加一些代码以转移明文密码当人们使用您的网站时。
  4. 执行摘要:即使在使用现代加密算法时,还有很多额外的工作,可疑的好处。

答案 1 :(得分:1)

您正在使用的任何Linux文件系统都可以接受文件名中除目录分隔符之外的任何字符。那你为什么不用其他东西替换任何/字符,或者更好的是,拒绝任何尝试注册包含/(可能还有任何其他非打印字符)的用户名? “哦,但碰撞怎么样?”如果你正在使用散列算法,你就不会消除碰撞的可能性,你只是在减少它的同时增加了无用的计算复杂性。要生成唯一标识符,请使用递增值(如Unix使用“用户ID”)或仅生成uuid:http://php.net/manual/en/function.uniqid.php - 并将该映射存储在数据库中。

维护用户名到ID的映射是其他所有人出于某种原因所做的事情。 :)

答案 2 :(得分:0)

您似乎只使用md5将用户名映射到文件名。没错,它是一种常见的单向散列算法。

我不会用它来加密密码。