【问题标题】:Encrypt a password in a preferences/properties file - Java在首选项/属性文件中加密密码 - Java
【发布时间】:2013-09-27 23:22:28
【问题描述】:

我不是密码学、破解密码和安全方面的专家。 我需要在首选项中存储用于将客户端连接到 SQL 服务器的 SQL 服务器的密码和用户名。

我一直在阅读,主要是在 SO,但其中大多数都超过 2 年,我们都知道安全世界正在快速变化。

根据我的阅读,我得出的结论是,大多数人建议使用 SHA-XXX 对密码进行哈希处理和/或建议使用 jasypt 来加密和解密密码

所以我的问题是保护首选项文件中的密码最安全的方法是什么? 我可以将 SHA-512 与盐一起使用并将盐也保存在首选项文件中吗?这安全吗?

【问题讨论】:

  • 没有什么是安全的,它是一种让您安心的措施。总有一些方法可以解密加密数据。
  • 密码不是用来解密的。无论您做什么,都不要使用 jasypt 来加密和解密密码。除非你有一个非常很好的理由。对于密码,散列总是更安全。
  • 很高兴您正在研究这个,并发现加盐哈希是处理密码的好方法。但是,它们的目的是让您保持用户对 您的 系统 (if hash(entered_password) == stored_hash, continue) 的访问权限,而不是让您保持用户对 other 的访问权限的一种方式 系统。您可以使用密码登录 SQL Server(尽管您不应该这样做);你不能使用哈希。

标签: java security encryption


【解决方案1】:

您似乎想稍后解密并使用该密码对服务器进行身份验证。这意味着您不能对其进行散列 - 如果您希望用户输入密码然后检查它是否正确,则散列很好,但您无法解密散列密码以将其呈现给服务器。

由于您的应用程序需要能够解密密码才能使用它,因此获得配置文件访问权限的攻击者将能够以与您的应用程序相同的方式解密密码。不管你做什么,你只能让获取密码变得更烦人(即通过模糊来混淆/安全)。

您可以采取的步骤(在大括号中采用该方法的程序名称):

  • 以某种专有方式对其进行加密。它不需要是安全的,因为无论您做什么,它都不会如果有人想知道您是如何做到的,他们可以编写一个工具来显示密码。对此您无能为力。您只是防止随意阅读,即使是简单的 XOR 也足够了。 (Miranda)
  • 使用静态密钥(任何获得密钥的人都可以解密)。
  • 使用适当的加密和随机密钥对其进行加密,并将密钥存储在密码旁边。 (Firefox)
  • 使用从跨系统更改的某些数据(例如 Windows 上的用户或系统 SID)派生的密钥使用适当的加密对其进行加密。这样做的好处是,如果有人窃取了配置(仅此而已)然后试图解密它,他就不能。这样做的缺点是,将配置文件复制到另一个安装会破坏密码,因此您需要处理这种情况。
  • 不对其进行加密以避免提供虚假的安全性。 (Pidgin)
  • 将密码存储在某种操作系统提供的钱包/凭据管理器(Windows 凭据管理器、Gnome 密钥环、KDE ​​钱包)中

【讨论】:

    猜你喜欢
    • 2015-09-10
    • 2015-09-30
    • 2011-04-15
    • 1970-01-01
    • 1970-01-01
    • 2018-02-08
    • 2016-01-10
    • 1970-01-01
    • 2015-12-29
    相关资源
    最近更新 更多