【问题标题】:How secure is my hashing algorithm? [closed]我的哈希算法有多安全? [关闭]
【发布时间】:2014-10-08 17:22:40
【问题描述】:

我正在写一个供个人使用的网站(我希望但不认为有人会来那里),并开发了以下算法:

function encryptPassword($username, $password) {
    $username=md5($username);
    $password=md5($password);

    $newpass = substr($username, 0, 5) . $password . substr($username, 5 );
    $newpass = md5($newpass);

    return $newpass;
}

由于它仍然是一种“知道密码就进入”系统(不过和往常一样),我认为将密码隐藏在数据库中会更好。

我以前使用过简单的 MD5x1 算法(基本上是:md5(pass) 并完成),但是可以访问数据库的人很容易能够反向散列它。这样一来,我认为您无法对这件事进行反向哈希。

【问题讨论】:

  • 一如既往地处理这些事情:失败。不要重新发明轮子。
  • 散列算法应该是安全的吗?我认为他们只是应该执行哈希而不是某种类型的加密。
  • 这是彻底不安全的。
  • @j08691:是的;在 Wikipedia 上阅读有关加密哈希的信息。
  • 没有人需要看过去的标题。如果您必须询问 Stack Overflow 您设计的算法是否安全,那不是。事实上,如果博士生没有来向您询问有关安全性的建议,那么您设计的任何东西都不可能是安全的。

标签: php security md5


【解决方案1】:

不是。

  1. MD5 在密码学上很弱。
  2. 盐应该是随机的,而不是来自已知值。
  3. 如今,打破一轮哈希是微不足道的。

以上解决办法:

  1. 使用更好的算法,最好是 SHA2 或更好的算法。
  2. 生成随机盐。
  3. 哈希多轮

哦,等等,PHP 中已经有一个完整的库可以做到这一点,除了 way 更好。它是password_hash(),如果你在实现它时使用的是早于 5.5 的 PHP 版本,那么 password_compat 会将它向后移植到 5.3.7,如果 仍然没有你真的需要更新你的 PHP 安装。

最后,除非您接受过密码学方面的大学教育,否则切勿尝试“自行开发”散列或加密方案。 99% 的情况下,您最终会得到一个远不如使用行业标准的安全系统。

【讨论】:

  • 对以上所有内容都是。补充:成功的散列算法向公众发布,由安全专家审查,然后最终(也许!)推荐用于生产站点。不要推出自己的加密货币。
  • @Sammitch 发布了正确答案。请接受。 :)
猜你喜欢
  • 2012-08-21
  • 1970-01-01
  • 2019-07-17
  • 2013-07-02
  • 1970-01-01
  • 2015-10-21
  • 2016-03-18
  • 2023-01-23
  • 2014-08-05
相关资源
最近更新 更多