【问题标题】:What kind of password hash/encryption is this?这是哪种密码哈希/加密?
【发布时间】:2012-05-06 04:31:20
【问题描述】:

试图找出 SQL 数据库中的哈希/加密类型。我们想创建一个应用程序来重置密码,但我一辈子都找不到他们是如何产生这个值的。

这里有多个例子

{enc:1}gdyb21LQTcIANtvYMT7QVQ==
{enc:1}ZEImYhrd/Ot/LcewJCFdMw==
{enc:1}+IOSBzegAx7nSytO1J3GEw==
{enc:1}6ULa1IFMxavY7SE66K3UDg==
{enc:1}UEFeGim2M8d0Iee7ejFRUw==
{enc:1}RjqL5rXOBpqJAKPjYkwLtw==
{enc:1}V/PEslecyYxFki03H4ctAQ==
{enc:1}VDEm9QmD+L7tsqcPz/S9XQ==
{enc:1}YkQuEPpL6dRfDLwKMEVMMg==
{enc:1}86rG96EP7T3tx9e8C7513g==
{enc:1}xvSwvsmkgwtXwVISvg7mJQ==
{enc:1}KjCF0RD4tcUGEP4Bpafw5A==
{enc:1}z9pGrdm4QAoomrFCJCXQIQ==
{enc:1}yhLv0HeW90FENKJjV9Nb+g==
{enc:1}EtYMl5FOW+zdpVvWsIj3Rw==

【问题讨论】:

  • 尾随的== 是base64 编码的绝版。
  • 我同意,22 的长度意味着它是一个 16 位散列,可能是 MD5,因为它通常用于密码。所以它可能是一个base64编码、未加盐的MD5哈希。

标签: sql encryption hash passwords


【解决方案1】:

让我们把它拆开:

{enc:1}gdyb21LQTcIANtvYMT7QVQ==

{enc:1} 部分可能是某种形式的版本控制。这是相当普遍的,因此您可以随着时间的推移升级您使用的任何散列/加密算法。每个值标识用于生成哈希的算法 - 如果实现决定使用不同的方法,它会知道使用第一个版本验证密码,但随后可以用 @ 替换 {enc:1} 987654325@ 或其他什么,以及新形式的哈希。

剩下的是base64——24个以==结尾的字符,也就是说原来的值是16个字节。

所以它是某种 16 字节(128 位)的散列,带有版本控制前缀。这几乎是我们所能知道的一切......它可能是 任何 128 位散列,或者可能是 128 位更长的散列(尽管你不得不想知道他们为什么在那时丢弃数据) .

如果您可以使用密码创建自己的用户,则可以执行进一步的测试。例如,两个具有相同密码的用户最终会得到相同的哈希吗?如果不是,如果您从密码 X 更改为密码 Y,然后为单个用户返回密码 X,that 会得到相同的哈希值吗? (虽然用户名可以用作salt,但值中没有明显的salt。)

【讨论】:

猜你喜欢
  • 2023-04-08
  • 1970-01-01
  • 1970-01-01
  • 2011-12-06
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2010-10-22
相关资源
最近更新 更多