【问题标题】:does my dba know what he is doing?我的dba知道他在做什么吗?
【发布时间】:2014-08-09 09:35:51
【问题描述】:

我对所有加密、散列等都不熟悉。 我收到了来自我的 dba 的电子邮件,告诉我从 .properties 文件中读取 admin un、密码,它看起来像这样:

ldap.provider.admin.password=fc34f78f665b60c5b99bad0ee1b228269e10e9cdd81c1a

然后他在他的电子邮件中指定:

ldap.provider.admin.password is actual password encrypted with “SHA256”.

在我的 java 程序中告诉我,我必须解密这个密码才能使用它。

是我还是他把它与加密哈希算法混淆了? 我真的可以解密吗?

【问题讨论】:

  • 听起来不像他做的那样(来源:每个问题都同时使用“hash”和“decrypt”这两个词)。也许问他你应该如何“解密”哈希。
  • 读取这个散列密码的目的是什么?是向您的程序验证用户身份,还是向其他服务验证您的程序?
  • @rgettman 我正在使用它进行身份验证:env.put(Context.SECURITY_PRINCIPAL,adminName); env.put(Context.SECURITY_CREDENTIALS,adminPassword);
  • 我怀疑您的 DBA 是在和您开玩笑。 SHA256 和其他类似的哈希函数的全部意义在于你不能反转它。

标签: java encryption sha


【解决方案1】:

“加密”是一个误导性术语,因为这意味着它可以被解密。用“SHA256”算法转换的东西实际上是加密的散列。加密散列算法没有“解密”功能。

但你仍然可以使用它。当用户提交密码时,对用户提交的密码执行“SHA256”,并将其与存储的哈希密码进行比较。从上面的字符串看,您可能需要将哈希输出转换为十六进制字符串进行比较。

此外,您可能首先需要确定是否将盐应用于哈希(为每个用户添加额外的随机内容以提高安全性)。如果是这样,那么您需要在哈希之前将盐应用于用户提交的密码。

【讨论】:

  • 我认为上下文是 OP 希望通过 LDAP 以编程方式访问某些服务(因此程序必须提供身份验证)。您答案的后半部分从验证凭据的 LDAP 服务的角度出发。
  • @delnan “在我的 java 程序中告诉我,我必须解密这个密码才能使用它。”从问题本身看来,Java 程序将尝试读取 .properties 文件以使用散列密码。
  • 这也是我的阅读:Java 程序将从.properties 读取哈希,并且需要使用经过哈希处理的密码。我对如何使用它有所不同:从 Java 程序想要使用此密码向其他程序验证 自身 的问题似乎很明显。
  • @delnan 无论哪种方式,您都无法解密 SHA-256 哈希输出。
  • 当然。那不是我要反对的。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-03-22
  • 1970-01-01
  • 1970-01-01
  • 2020-05-15
  • 1970-01-01
  • 2011-05-12
  • 2018-05-30
相关资源
最近更新 更多