【问题标题】:sha1 password hash linuxsha1密码哈希linux
【发布时间】:2013-03-15 14:23:00
【问题描述】:

我想要的是能够获得特定密码的 sha1 哈希值。

例如,如果我的密码是“hello”,我需要在 linux 中输入什么命令来获取 hello 的 sha1 散列值?

我试过了

echo -n "hello" | sha1sum

但是它返回的值没有给出数据库存储过程接受的值,该存储过程接受散列值来验证登录(问题不在这个存储过程中,因为我们到处都使用它验证目的)。

基本上,

我只需要知道一个命令来给出一个字符串并取回它的 sha1 散列值

谢谢! :)

【问题讨论】:

  • 您的问题是缺少盐。要么一分为二,要么二分之一。
  • Python 和 sha1sum 都返回 aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d。您确定密码在散列之前没有附加盐吗?
  • 我想如果我的命令没有错,那一定是别的东西。谢谢你看这个!
  • 结束了一个盐问题
  • 嘿,丹,您有机会接受回答您问题的答案吗?

标签: linux bash shell cryptography sha1


【解决方案1】:

密码格式在不同的应用程序中可能会有所不同。例如,对于/etc/passwd,您可以生成一个 SHA-256 密码:

# perl -e 'print crypt("password", q($5$salt$)), "\n";'
$5$salt$Gcm6FsVtF/Qa77ZKD.iwsJlCVPY0XSMgLJL0Hnww/c1
#

对于LDAP 中的密码(例如slapd.conf),可能是:

# slappasswd -h "{SSHA}"
New password:
Re-enter new password:
{SSHA}bjEe8dPBjyecc7hD1kUhxQUdF9dt4Hya
#

您需要知道应用程序的确切密码格式以及密码是如何生成的。

【讨论】:

  • 您好,我有两个问题...顶级方法仍然安全吗?为什么盐直接输出到哈希?它不应该在散列之前添加吗?提前谢谢!
  • 1) 我无法确定它是否安全,因为这是非常主观的。在我的 Debian 9 上,它仍然支持 md5、sha256 和 sha512。 2) 是的,盐会影响哈希结果,盐也会成为密码的一部分。这就是系统验证用户密码的方式:用户输入密码(明文),系统获取盐并重新计算结果并与/etc/passwd(实际上是/etc/shadow)中的密码(加密)进行比较.没有盐,系统将无法验证它。
【解决方案2】:

我知道这真的很老了,但这就是为什么它不起作用以及如何处理它:

当你运行

echo -n "hello" | sha1sum

在你的例子中你得到

aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d  -

注意最后的“-”。

前面的散列是 hello 的正确 sha1 散列,但破折号弄乱了散列。

为了只获得第一部分,您可以这样做:

echo -n "hello" | sha1sum | awk '{print $1}'

这将通过 awk 提供您的输出,并且只为您提供第一列。 结果:“hello”的正确 sha1

aaf4c61ddcc5e8a2dabede0f3b482cd9aea9434d

希望这对某人有所帮助。

【讨论】:

  • OP 已经评论这是一个 salt 问题。并且仅使用散列值(MD5、SHA1、...)作为密码并不是一个好习惯。
  • 我完全同意不使用未加盐的 md5 或 sha1 等作为密码。我实际上错过了他不再需要答案的事实。令我震惊的是,他使用的命令并没有完全起作用,因为它最终会输出一个额外的破折号。由于他的问题是“我只需要知道一个命令来给出一个字符串并取回它的 sha1 散列值”并且我没有看到完全回答,所以我加入了。感谢您指出这一点。
【解决方案3】:
echo -n YOUR_TEXT | sha1sum | awk '{print $1}'

将 YOUR_TEXT 与你必须散列的文本交换。

【讨论】:

  • 我已经在 15 个月前给出了准确的答案。最重要的是,它提供了背景和真实的解释,而不仅仅是命令。为什么?
猜你喜欢
  • 2011-04-30
  • 2013-06-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-06-05
  • 1970-01-01
  • 2012-07-07
  • 1970-01-01
相关资源
最近更新 更多