2012-06-20 43 views
2

爲什麼執行命令openssl sha1 < /dev/null | wc --bytes後輸出爲50? SHA-1的輸出大小應爲160比特,這使我們有20個字節。Openssl sha1長度

回答

5

爲什麼輸出openssl sha1 < /dev/null | wc --bytes 50?

$ openssl sha1 < /dev/null 
(stdin)= da39a3ee5e6b4b0d3255bfef95601890afd80709 

由於20字節摘要是通過(stdin)=前綴和十六進制表示。

+0

謝謝,我完全忘記該完整的字符串被傳遞給'wc'。這是與Google SREs會面期間提出的競賽問題之一,我不得不承認這很棘手:) –

2

如果您想要原始未格式化的字節,請將來自OpenSSL的十六進制格式的輸出傳輸到xxd -r -p,以將該表示轉換爲原始字節。

例如,爲了使字符串foo的Base64編碼的SHA-1摘要:

$ echo "foo" | openssl sha1 | xxd -r -p | base64 
8dLS+STphqyG/fezbJS83zK+7BU= 

或者簡單地驗證消息長度:

$ echo "foo" | openssl sha1 | xxd -r -p | wc --bytes 
20