เหตุใด cygwin sha512 จึงสร้างเช็คซัมที่แตกต่างกันขึ้นอยู่กับเทอร์มินัล


2

ฉันใช้ Windows 7 และมีทั้ง Cygwin และเครื่องมือบรรทัดคำสั่ง Git อิง ming

เมื่อฉันออกคำสั่ง:

c:\>echo -n hello | e:\cygwin\bin\sha512sum

จาก Windows cmd มันสร้าง

91fe211053c6377ddfd218a061f96de1ca304b10d966a4c3572d9af22bbe86dc471653d0f9b14f923762d0bf83a0abfe285b855e1ee06b0d4ab4a60a8d8801e3 *-

ซึ่งฉันเชื่อว่าเป็น ไม่ถูกต้อง .

อย่างไรก็ตามเมื่อฉันออกคำสั่ง

$ echo -n hello | /e/cygwin/bin/sha512sum

จากบรรทัดคำสั่ง git มันจะสร้าง

9b71d224bd62f3785d96d46ad3ea3d73319bfbc2890caadae2dff72519673ca72323c3d99ba5c11d7c7acc6e14b8c5da0c4663475c2e5c3adef46f73bcdec043 *-

ซึ่งฉันเชื่อว่าเป็นเช็คซัมที่ถูกต้อง ฉันสมมติว่าอินพุตเดียวกันถูกส่งไปยังไบนารีที่แน่นอนได้ แต่มันไม่ถูกต้องกับพฤติกรรมที่ฉันเห็น Windows CMD ทำการเข้ารหัสแบบตลกบางอย่างที่ส่งอินพุตที่แตกต่างกันไปยังไบนารีของ cygwin sha512 หรือไม่

แก้ไข สำหรับผู้ที่สนใจในการรับเช็คซัมที่ถูกต้องจากพรอมต์คำสั่ง Windows cmd มาตรฐานเคล็ดลับคือไม่ใช้คำสั่ง window echo การใช้คำสั่ง echo ของ cygwin จะสร้างการตรวจสอบที่ถูกต้อง

เช่น.,

e:\cygwin\bin\echo -n hello | e:\cygwin\bin\sha512sum

คำตอบ:


3

หน้าต่างเริ่มต้น echo คำสั่งเพิ่มช่องว่างและการยกเลิกบรรทัดแม้ว่าจะถูกเรียกด้วย -n. ลองสิ่งนี้: echo -n hello > a.txt ติดตามโดย dirและคุณจะเห็นว่าคุณไม่มีไฟล์ 5 ไบต์


3

echo windows เริ่มต้นไม่เข้าใจ "-n" ดังนั้นทั้งสองคำสั่งจึงไม่เทียบเท่ากัน

e:\cygwin64\bin>echo -n "hello" |od -c
0000000   -   n       "   h   e   l   l   o   "      \r  \n
0000015

$ echo -n "hello" |od -c
0000000   h   e   l   l   o
0000005
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.