Linux中哈希命令的区别

问题描述 投票:0回答:1

我正试图为一个登录数据库获取base64编码的密码哈希值。我正在使用picketbox安全库来获取密码的base64编码哈希值,但我想使用不同的工具。

  1. 如果我使用:

    java -cp $JBOSS_HOME/modules/system/layers/base/org/picketbox/main/picketbox-4.9.6.Final.jar org.jboss.security.Base64Encoder  master SHA-256
    

    我得到的结果是:

    [/GE7Tf1nNqe9JoyKDnTtDRwEqVn1nddO8odJg/1EP8k=];
    

    [ ] 必须在数据库中被删除才能正常登录。

  2. 当我使用:

     echo -n master | openssl dgst -sha256 -binary | base64
    

    我得到的结果是:

    /GE7Tf1nNqe9JoyKDnTtDRwEqVn1nddO8odJg/1EP8k=
    

同样的结果。

  1. 但是当我使用

    echo -n master |sha256sum -b | base64
    

    我得到的结果是:

    ZmM2MTNiNGRmZDY3MzZhN2JkMjY4YzhhMGU3NGVkMGQxYzA0YTk1OWY1OWRkNzRlZjI4NzQ5ODNmZDQ0M2ZjOSAqLQo=
    

这两者之间有什么区别? openssl dgst -sha256 -binarysha256sum -b? 我以为他们会提供相同的哈希值。

java linux hash
1个回答
0
投票

看看这两者的区别 opensslsha256sum:

  • openssl 打印原始二进制的哈希值。它不是文本,也不是人类可读的,它是纯字节。

    $ echo -n master | openssl dgst -sha256 -binary
    �Y��N�I��D?�
    

    如果你用 wc ---bytes 你会看到它的打印正好是32个字节。

    $ echo -n master | openssl dgst -sha256 -binary | wc --bytes
    32
    

    我们也可以用 hexdump:

    $ echo -n master | openssl dgst -sha256 -binary | hexdump
    0000000 61fc 4d3b 67fd a736 26bd 8a8c 740e 0ded
    0000010 041c 59a9 9df5 4ed7 87f2 8349 44fd c93f
    0000020
    
  • 与此相反。sha256sum 用十六进制的数字以人类可读的形式打印哈希值。0-9 和字母 a-f.

    $ echo -n master | sha256sum -b
    fc613b4dfd6736a7bd268c8a0e74ed0d1c04a959f59dd74ef2874983fd443fc9 *-
    

    它与上面的乱码二进制信息相同,但呈现方式不同。你会注意到,十六进制值比二进制数据占用了更多的空间。它还包括了最后的文件名,这里的文件名是加密的 *-. * 表示您使用了 -b 旗帜,而 - 表示输入是从 stdin 读取的。

你可以从 openssl 如果你改变 -binary-hex:

$ echo -n master | openssl dgst -sha256 -hex
(stdin)= fc613b4dfd6736a7bd268c8a0e74ed0d1c04a959f59dd74ef2874983fd443fc9

但没有办法做相反的事情。sha256sum 没有打印二进制哈希的标志。它只能打印十六进制。

© www.soinside.com 2019 - 2024. All rights reserved.