0

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

3 回答 3

2

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

  1. 任何能破解用户名的人都能破解密码,反之亦然,所以你一无所获
  2. 这将使编写大量用户管理查询和代码成为一场彻头彻尾的噩梦
  3. 散列密码之所以有价值,是因为(理想情况下)没有办法将明文取回。为了使您的站点正常工作,您需要包含将用户名解密为明文的代码,并且已经在您系统上的黑客如果他有任何好处,只需在您的解密例程中添加一些代码以转移明文密码当人们使用您的网站时。

执行摘要:即使在使用现代加密算法时,也需要大量额外的工作和可疑的好处。

于 2012-11-13T22:13:33.320 回答
1

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

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

于 2012-11-13T23:45:00.640 回答
0

看起来您只使用 md5 将用户名映射到文件名。没有错,这是一种常见的单向哈希算法。

我不会用它来加密密码。

于 2012-11-13T22:31:57.780 回答