sql - 这是什么样的密码哈希/加密?

标签 sql encryption hash passwords

试图找出这种类型的哈希/加密在SQL db中。我们想创建一个应用来进行密码重置,但是我终生无法找到它们如何生成此值。

这是多个例子

{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==

最佳答案

让我们拆开它:

{enc:1}gdyb21LQTcIANtvYMT7QVQ==
{enc:1}部分可能是某种形式的版本控制。这相当普遍,因此您可以随时间升级使用的任何哈希/加密算法。每个值都标识用于生成哈希的算法-如果实现决定使用其他方法,则它将知道使用第一个版本来验证密码,但随后可以用{enc:1}或其他内容替换{enc:2}以及新的形式哈希。

其余的是base64-它是24个字符,以==结尾,这意味着原始值为16个字节。

因此,它是某种16字节(128位)的哈希,带有版本控制前缀。这几乎就是我们所能知道的全部...它可能是任何128位哈希,或者可能是更长哈希的128位(尽管您不得不怀疑为什么此时会丢弃数据)。

如果可以使用密码创建自己的用户,则可以执行进一步的测试。例如,使用相同密码的两个用户是否会使用相同的哈希值?如果不是这样,如果您将一个用户从密码X更改为密码Y,然后又更改回密码X,那是否会得到相同的哈希值? (尽管可以使用用户名作为盐,但值中没有明显的盐。)

关于sql - 这是什么样的密码哈希/加密?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10316524/

相关文章:

c# - 从类型列表中获取 IDataReader

mysql - DBeaver 数据格式化 - 巴西

sql - 使用 row_number() 通过分区生成计算列

c# - 在 URL 或 cookie 中安全传输对象的注意事项

perl - Perl 5 中的哈希随机化

sql - 多个表的左外连接

git - 如何使用预处理和后处理包装 git 文件 merge ?

haskell - Codec.Crypto.RSA : (decrypt . encrypt)/= id 当使用 PKCS#1 v1.5 填充时?

java - 使用自己的 HashSet.add() 实现

c# - 如何散列密码