【问题标题】:Java two way encryption library [duplicate]Java双向加密库[重复]
【发布时间】:2011-11-02 11:30:26
【问题描述】:

我需要将数据库密码保存为加密字符串,然后在连接前解密。

谁能给我推荐一个好的Java双向加密库?

【问题讨论】:

  • 如果您使用基于密码的加密(一种双向技术)对您的密码进行加密,并且攻击者知道了您的加密密码,那么您的所有用户密码都将被泄露(并且可能全部在一次)。如果您没有这样的加密密码(或密钥)来解密,这种风险就会消失,攻击者将不得不信任暴力破解或类似策略。找到HERE
  • 这是对的。密码应始终为 hashed 且未加密。
  • @entek:我认为你误解了这个问题,因为我读到这不是关于存储用户密码,而是用于访问数据库的密码。您需要数据库用户和密码才能连接。现在,对于 Web 应用程序,这应该由应用程序服务器通过 JNDI 资源处理并安全地存储密码,但是如果您正在编写一个普通的旧 Java 应用程序,它通过 JDBC 访问数据库,您将需要在某个地方输入密码.并且将其保留为纯文本不是这样做的方法,因此加密密码绝对是一个有效的用例......
  • @entek 通常你不能使用已经散列的密码来登录数据库。此外,在指定的情况下,这不会以任何方式提高安全性。
  • 我错了..我以为你想保存某人的密码..在这种情况下,散列当然不是选择..我的错

标签: java security encryption


【解决方案1】:

Dan,看看这个线程,因为有一些有用的信息关于如何通过 Java 的 API 在属性文件中做到这一点。

Encrypt Password in Configuration Files?

【讨论】:

    【解决方案2】:

    在安全性方面,Base64 编码几乎与任何“硬”加密一样好。

    (cmets 中的争议。:))

    编辑:好的,最近的反对票让我回到这里补充一些话。

    上述声明旨在提醒人们不可能让任何自动化活动以安全的方式向其他方进行身份验证。如果您使用密码来加密和解密存储的密码,您会将这个新密码存储在哪里?简单的!只需设置第三个密码即可安全存储第二个密码,依此类推。

    要点是:任何可以通过某种自动程序解密的密码实际上没有加密,而只是被混淆了。因此,加密首先是徒劳的。

    【讨论】:

    • 它并不完美,但仍然更好。你是对的,你必须在密码之上继续添加密码......但是让它在明显的视线中可能会更糟。假设您正在存储外部服务的密码以代表用户进行身份验证。如果您以明文形式存储它并且您的数据库(仅)被破坏,他们将获得密码。如果您加密它们并将密钥存储在文件中(以及运行时的应用程序内存)并且(仅)数据库被破坏,攻击者将不得不暴力破解解密密钥。每条记录使用盐会更慢。
    • 当然你是对的。但是,您说“并且将密钥存储在一个文件中”……如果有一天该文件访问了互联网,那么它就又消失了。我想这归结为尽最大努力的技术,在某种程度上拆分所需的信息,并希望没有人能看到所有各个部分。
    • 当然,完全同意!
    【解决方案3】:

    通常密码保存为哈希,因此获取真实密码的过程是不可能的,除了将其转换回来我们所做的是将用户输入的密码转换为哈希然后匹配它们。如果你能解释更多关于你的用例,那就清楚了

    【讨论】:

    • 哈希和加密也是两件事,加密是一种可以转换回来的形式,但哈希是单向的。
    猜你喜欢
    • 2012-03-15
    • 2015-07-15
    • 1970-01-01
    • 2012-01-16
    • 1970-01-01
    • 2011-04-23
    • 1970-01-01
    • 2010-09-07
    • 1970-01-01
    相关资源
    最近更新 更多