首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用md5加密文件名

使用md5加密文件名
EN

Stack Overflow用户
提问于 2012-11-14 06:07:26
回答 3查看 1.6K关注 0票数 0

在网站上,密码通常是用MD5编码的。我也在考虑将用户名编码为MD5中的文件名。我会在基于Linux的服务器上使用PHP。除了在不解密的情况下无法区分之外,用PHP加密文件名到MD5还有什么缺点吗?

代码语言:javascript
复制
<? 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;
}
?>
EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-11-14 07:45:01

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

维护用户名到is的映射是每个人都要做的事情,这是有原因的。:)

票数 1
EN

Stack Overflow用户

发布于 2012-11-14 06:13:33

正如H2C03提到的,MD5已经崩溃了(参见他在评论中的链接)。还有以下因素需要考虑:

  1. 任何可以破解用户名的人都可以破解密码,反之亦然,所以你什么也得不到
  2. 这将使编写大量用户管理查询和代码完全是一场噩梦
  3. 散列密码有价值的原因是因为(理想情况下)没有办法恢复明文。为了使您的站点正常工作,您需要包含将用户名解密为明文的代码,而您系统中已经存在的黑客会在您的解密例程中添加一些代码,以便在人们使用您的站点时转移明文密码。

执行摘要:即使使用现代加密算法,也要做大量的额外工作,但收益却令人怀疑。

票数 2
EN

Stack Overflow用户

发布于 2012-11-14 06:31:58

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

我不会用它来加密密码。

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

https://stackoverflow.com/questions/13369690

复制
相关文章

相似问题

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