[英]Difference between hashing commands in Linux
我正在嘗試獲取在 base64 中編碼的密碼哈希以用於登錄數據庫。 我正在使用 Picketbox 安全庫來獲取 base64 編碼的密碼哈希,但我想獲得一個不同的工具。
如果我使用:
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=];
[
]
必須在數據庫中刪除才能正確登錄。
當我使用:
echo -n master | openssl dgst -sha256 -binary | base64
我得到:
/GE7Tf1nNqe9JoyKDnTtDRwEqVn1nddO8odJg/1EP8k=
同樣的結果。
但是,當我使用:
echo -n master |sha256sum -b | base64
我得到:
ZmM2MTNiNGRmZDY3MzZhN2JkMjY4YzhhMGU3NGVkMGQxYzA0YTk1OWY1OWRkNzRlZjI4NzQ5ODNmZDQ0M2ZjOSAqLQo=
openssl dgst -sha256 -binary
和sha256sum -b
有什么區別? 我以為他們會提供相同的 hash。
看看openssl
和sha256sum
的區別:
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.