代码之家  ›  专栏  ›  技术社区  ›  Anton Apua Escalante

哈希加盐

  •  0
  • Anton Apua Escalante  · 技术社区  · 13 年前

    你好,对不起,如果这可能是一个愚蠢的问题,我将尝试为我的网站沙+盐。想知道如何随机化我的盐。注册后,这两个都将被散列到数据库中。此外,我还需要对sha和salt进行解密以进行用户验证。如果有人给我指出正确的检测或一篇好文章,那就太好了。谢谢。我也是网站安全方面的新手,我仍在研究我目前将为我的网站使用哪些安全实现,这些都是我将要做的。

    1. 密码散列
    2. 反SQL注入
    3. 隐藏URL中的值

    我想知道更多我应该为我的安全添加什么。我正在把学校管理系统作为一个项目。

    到目前为止,我正在调查。Anti-bruteforce和我的教授给了我一个关于HTTPS的提示。

    此外,如果密码是sha+salt加密的,我将如何验证登录。

    3 回复  |  直到 13 年前
        1
  •  2
  •   Community Mohan Dere    9 年前

    由于这是一个相当大的问题,我可能更容易向您介绍一些有用的资源,而不是试图自己解释。

    关于网络密码学的介绍A List Apart wrote a nice article 。它不太讨论实现,但提供了一个很好的概述。

    有关安全缺陷列表以及如何解决这些问题,请参阅 OWASP Top Ten Project

    这是一个指南 PHP Security 这是相当全面的。

    最后,请参阅 this question 了解有关创建登录系统的更多信息。

    我建议你在Stack Overflow周围搜索,因为你可能有一些问题的好答案。

        2
  •  1
  •   Community Mohan Dere    9 年前

    作为salt,它只是一个随机字符串,添加到您想要编码的字符串的哈希中,有足够的方法来生成它[例如。 this on SO ]。

    您不需要也无法解密任何sha结果,因为sha(类似于md5)是 散列 算法,而不是 地下室 函数,也就是说,它并不意味着隐藏任何内容以供以后检索:这很重要,因为我不希望我注册的网站的管理员从数据库中读取我的密码。

    散列是将一个数据集的元素映射到另一个数据集中的较短元素,以[几乎全部] injective way -您可以将任意长字符串映射到固定长度的键:这使您可以在不知道原始值的情况下在哈希域中进行比较。

    hash( value1 ) = hash ( value2 ) => value1 = value2
    

    我说 几乎 因为散列算法有一些冲突[例如,前面语句的例外,例如 hash(value1) = hash(value2) 不意味着这两个值是相同的]-盐在这方面也有帮助。

    也就是说,以下是您将密码保存到数据库的方式:

    • 生成盐;
    • 准备 实际密码的盐:把它放在 之前 防止pwd dictionary attacks ;
    • hash 使用适当算法连接的字符串[我选择 sha1 只是为了树立榜样];
    • 将字符串和salt都保存到数据库中。

    代码中:

    $user -> salt = your_salt_generator();
    $user -> hashedPwd = hash('sha1', $salt . $userChosenPwd);
    

    Pwd对照 $username / $password 只是:

    • 获取给定的用户 $用户名 来自数据库;
    • 如果它存在,使用上面保存的salt和给定的密码的过程,并检查它是否等于存储的hash。

    代码中:

    hash('sha1', $user -> salt . $sentPassword) == $user -> hashedPwd;
    

    关于在URL中隐藏值,这更像是一个SEO/可读性主题,而不是一个安全主题:URL应该在路由时生成[例如。 http://somesite.com/products/:id 访问id th产品],并且您的服务器逻辑不应该容易受到向您的网站发出的请求中的内容的攻击[不管我现在不能处理的完全是垃圾的情况]。


    关于MySQL注入,我们从 prepared statements 从…起 PDO extension

    关于这个问题,有数百万个答案,所以,看看周围吧。

    坚持你的工作!

        3
  •  1
  •   Kris    13 年前

    这并不是你问题的直接答案,但请查看phpass http://www.openwall.com/phpass/

    它将为您处理salting,并经过许多安全专家的审查,被认为是一个非常好的密码哈希工具

    推荐文章