ฉันสังเกตพฤติกรรมนี้ภายใต้ OpenSSL 1.0.0e บน Ubuntu 11.10 ในขณะที่ผลผลิต OpenSSL 0.9.8k และ 0.9.8t เป็นเพียงแฮช บรรทัดคำสั่งของ OpenSSL ไม่ได้ถูกออกแบบมาให้มีความยืดหยุ่นมันเป็นหนทางที่รวดเร็วและสกปรกในการคำนวณการเข้ารหัสลับจากบรรทัดคำสั่ง
หากคุณต้องการใช้ OpenSSL ให้กรองเอาท์พุท:
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //'
บน Linux (ด้วยเครื่องมือ GNU หรือ BusyBox) คุณสามารถใช้sha1sum
ซึ่งไม่จำเป็นต้องติดตั้ง OpenSSL และมีรูปแบบเอาต์พุตที่เสถียร มันจะพิมพ์ชื่อไฟล์เสมอดังนั้นตัดออก
echo -n "foo" | sha1sum | sed 's/ .*//'
บนระบบ BSD รวมทั้ง OSX sha1
คุณสามารถใช้
echo -n "foo" | sha1 -q
เอาต์พุตทั้งหมดเหล่านี้จะตรวจสอบผลรวมเลขฐานสิบหกตามด้วยขึ้นบรรทัดใหม่ ข้อความภายใต้ระบบยูนิกซ์ประกอบด้วยลำดับบรรทัดเสมอและแต่ละบรรทัดลงท้ายด้วยอักขระขึ้นบรรทัดใหม่ หากคุณเก็บเอาต์พุตของคำสั่งในตัวแปรเชลล์บรรทัดใหม่สุดท้ายจะถูกตัดออก
digest=$(echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //')
หากคุณต้องการไพพ์อินพุตลงในโปรแกรมที่ต้องการเช็คซัมที่ไม่มีการขึ้นบรรทัดใหม่ขั้นสุดท้าย (ซึ่งหายากมาก) ให้ตัดการขึ้นบรรทัดใหม่
echo -n "foo" | openssl dgst -sha1 | sed 's/^.* //' | tr -d '\n' | unusual_program