有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

我应该在哪里散列用户密码,在Web服务器应用程序中还是在数据库中?(赞成和反对)

我正在尝试创建一个网站,该网站具有将用户注册为Oracle数据库和JavaEE+Tomcat服务器应用程序的功能。 我阅读了关于散列密码的不同技术和建议,并为每个用户添加了唯一的salt。 我发现Java和Oracle中都有这样的工具:
1) 甲骨文:https://oracle-base.com/articles/9i/storing-passwords-in-the-database-9i
2) Java:http://howtodoinjava.com/security/how-to-generate-secure-password-hash-md5-sha-pbkdf2-bcrypt-examples/

所以我可以用两种方法解决这个问题:

1)在web应用程序中散列密码,并通过JDBC连接发送到数据库散列值
2) 将密码以明文形式发送到数据库,并使用Oracle DBMS_CRYPTO包在其中执行哈希运算

我已经尝试过搜索这个主题,但我发现的只是关于使用JavaScript的客户端哈希与不强调数据库与web应用程序部分的服务器端哈希的问题

也许没有确切的答案,请告诉我: 这些解决方案有哪些优点和缺点?使用第一个或第二个可以面对哪些问题


共 (1) 个答案

  1. # 1 楼答案

    1. 使用https连接
    2. 按输入的密码发送
    3. 注册时散列(详细信息如下)密码并保存在数据库中
    4. 登录时对密码进行散列,并与散列值进行比较,我就是DB

    如何散列:
    不要加密密码。用随机盐在HMAC上迭代大约100毫秒(盐需要与散列一起保存)。使用诸如password_hash、PBKDF2、Bcrypt等函数和类似函数。重点是让攻击者花费大量时间用暴力寻找密码

    根据上面的散列方法,salt、迭代和版本将使用散列密码保存,或者这需要在代码中完成

    请参阅OWASP(开放式Web应用程序安全项目)Password Storage Cheat Sheet

    见证券交易所How to securely hash passwords, The Theory