簡體   English   中英

Linux 中的散列命令之間的區別

[英]Difference between hashing commands in Linux

我正在嘗試獲取在 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有什么區別? 我以為他們會提供相同的 hash。

看看opensslsha256sum的區別:

  • openssl以原始二進制格式打印 hash。 它不是文本,不是人類可讀的,它是純字節:

     $ 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和字母af以十六進制格式以人類可讀的形式打印 hash。

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

    它與上面的亂碼二進制信息相同,但呈現方式不同。 您會注意到十六進制值比二進制數據占用更多空間。 它還包括最后的文件名,這里是神秘的*- *表示您使用了-b標志,而-表示輸入是從標准輸入讀取的。

如果將-binary更改為-hex ,則可以從openssl獲得相同的十六進制值:

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

但是,沒有辦法做相反的事情。 sha256sum沒有用於打印二進制 hash 的標志。 它只能做十六進制。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM