ไทย

เครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ · SHA เครื่องคำนวณแฮช

SubtleCrypto.digest คำนวณ SHA-256 แฮชในเบราว์เซอร์อย่างไร

· มันทำงานอย่างไร

sha-256 การเข้ารหัส เบราว์เซอร์-apis

UTF-8 ไบต์เข้าสู่เบราว์เซอร์ SHA-256 แยกย่อยและปล่อยให้เป็นเลขฐานสิบหก
ภาพประกอบเวกเตอร์ต้นฉบับ ToolAcre

เบราว์เซอร์สมัยใหม่ทุกตัวสามารถแฮชไบต์ผ่าน Web Crypto ได้ โพสต์นี้ติดตามหนึ่งสตริงจาก TextEncoder ถึง crypto.subtle.digest ไปจนถึงการแยกย่อยแบบฐานสิบหก และอธิบายข้อจำกัดของแต่ละขั้นตอน

แฮชที่ไม่มีการติดตั้ง npm - สถานการณ์ที่การย่อยแบบเนทีฟจะเหนือกว่าไลบรารีแบบรวม

คุณสามารถคำนวณไดเจสต์สำหรับค่าข้อความสั้นโดยไม่ต้องติดตั้งแพ็คเกจแฮชหรือโพสต์ข้อมูลไปยังเว็บไซต์แฮชระยะไกล เบราว์เซอร์เปิดเผย crypto.subtle.digest บนต้นทางที่ปลอดภัย แฮชคือลายนิ้วมือไบต์ที่มีความยาวคงที่ตามที่กำหนด มันไม่ได้ซ่อนอินพุตหรือพิสูจน์ว่าใครเป็นผู้ให้ข้อมูล ToolAcre ใช้การใช้งานเบราว์เซอร์แทนที่จะส่งอัลกอริธึม SHA ที่เขียนด้วยมือ และเก็บสตริงไว้ในแท็บ

ข้อความไม่ใช่ไบต์ — เข้ารหัสอินพุตด้วย TextEncoder เป็น UTF-8 ก่อนที่จะแฮช และเหตุใดขั้นตอนนี้จึงตัดสินใจคำตอบ

ข้อความ “cafe” และไบต์ที่ป้อนเข้าไปในแฮชไม่ใช่วัตถุชนิดเดียวกัน TextEncoder จับคู่สตริงกับ UTF-8 ไบต์ (63 61 66 C3 A9 สำหรับร้านกาแฟ) ในขณะที่การแปลง Latin-1 แบบไร้เดียงสาจะใช้ E9 สำหรับอักขระตัวสุดท้ายและสร้างการแยกย่อยที่แตกต่างกัน แม้แต่ข้อความที่มองเห็นเหมือนกันก็สามารถมีรูปแบบการปรับมาตรฐาน Unicode ที่แตกต่างกันได้ ยอมรับการเข้ารหัสและการทำให้เป็นมาตรฐานก่อนเปรียบเทียบแฮชระหว่าง JavaScript, CLI และเซิร์ฟเวอร์ โหมดข้อความของ ToolAcre ทำการแปลง UTF-8 อย่างชัดเจนก่อนที่จะแฮช

การเรียกสรุป — crypto.subtle.digest พร้อมชื่ออัลกอริทึมและ ArrayBuffer และเหตุใดจึงส่งคืนสัญญา

crypto.subtle.digest("SHA-256", bytes) ส่งคืน Promise เนื่องจากงานการเข้ารหัสอาจไม่ตรงกัน รอก่อนที่จะอ่านผลลัพธ์ วิธีการนี้ใช้บัฟเฟอร์อินพุตทั้งหมดแทนที่จะเป็นตัววนซ้ำแบบสตรีมมิ่ง SHA-256 ส่งเสียง 256 bits (32 bytes) ไม่ว่าอินพุตจะมีอักขระสามตัวหรือสามล้านตัวก็ตาม ข้อจำกัดบริบทที่ปลอดภัยหมายถึง HTTPS หรือ localhost เป็นสิ่งจำเป็นสำหรับ SubtleCrypto API และเครื่องมือจะรายงานการขาดหายไปแทนที่จะสร้างทางเลือกสำรอง

จาก ArrayBuffer เป็นเลขฐานสิบหก — เปลี่ยนไบต์ผลลัพธ์ให้เป็นสตริงอักขระ 64 ที่ผู้คนรู้จัก

Promise แก้ไขเป็น ArrayBuffer ไบต์ ไม่ใช่สตริงที่คุ้นเคยของเลขฐานสิบหก แปลงแต่ละไบต์เป็นอักขระฐาน 16 สองตัว โดยมีศูนย์นำหน้าตามต้องการ โดยให้ผล 64 อักขระตัวพิมพ์เล็กทุกประการสำหรับ SHA-256 การแสดงเลขฐานสิบหกนี้จะเพิ่มความยาวของ 32 bytes เป็นสองเท่า แต่ไม่เปลี่ยนการสรุปข้อมูล Base64 สามารถแสดงถึง 32 bytes แบบเดียวกันได้กะทัดรัดยิ่งขึ้น การเปรียบเทียบจะสมเหตุสมผลหลังจากยืนยันอัลกอริธึม การเข้ารหัสอินพุต และการแสดงเอาท์พุตที่ตรงกันเท่านั้น

ตัวอย่างการทำงาน — การแฮชสตริงสั้นๆ ทีละขั้นตอน โดยแสดงไบต์ในแต่ละขั้นตอน

สำหรับ ASCII ข้อความ abc นั้น UTF-8 จะสร้างไบต์ 61 62 63 SHA-256 ของไบต์ที่แน่นอนเหล่านั้นคือ ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad ทดสอบสิ่งนี้ใน ToolAcre และการใช้งานแฮชที่เชื่อถือได้อื่น: การเปลี่ยน abc เป็น abc ตามด้วยการขึ้นบรรทัดใหม่จะให้ผลลัพธ์ที่แตกต่างออกไป หากเอาต์พุตแตกต่างกัน ให้ตรวจสอบช่องว่างที่ซ่อนอยู่และการเข้ารหัสไบต์ก่อนที่จะสงสัยการเข้ารหัสลับแบบดั้งเดิม ข้อมูลย่อยที่แสดงเป็นเวกเตอร์ทดสอบที่สามารถทำซ้ำได้ ไม่ใช่การอ้างว่า abc เป็นความลับ

บริบทที่ปลอดภัย — เพราะเหตุใด crypto.subtle จึงใช้ได้เฉพาะบน HTTPS และ localhost เท่านั้น

crypto.subtle เป็นบริบทที่ปลอดภัย API โดยทั่วไปแล้ว เพจ HTTPS ที่ใช้งานจริงและเพจการพัฒนาโลคัลโฮสต์จะเปิดเผยเพจดังกล่าว เพจ HTTP ระยะไกลที่ไม่ปลอดภัยธรรมดาอาจไม่ปลอดภัย เครื่องมือนี้ยังต้องการหน่วยความจำเพียงพอที่จะเก็บอินพุตและเอาต์พุต ในกรณีที่ Web Crypto ไม่พร้อมใช้งาน การสลับไปใช้แฮช JavaScript ที่ไม่ได้รับการตรวจสอบอย่างเงียบๆ จะทำให้ผลลัพธ์ที่คำนึงถึงความปลอดภัยขึ้นอยู่กับการใช้งานที่แตกต่างกัน ล้มเหลวอย่างชัดเจนและเลือกสภาพแวดล้อมที่ปลอดภัยแทน

สิ่งนี้ไม่ครอบคลุมถึง - การแฮชแบบใช้คีย์ (HMAC) และการแฮชแบบเพิ่มหน่วยของอินพุตขนาดใหญ่มาก ซึ่ง API แบบย่อยครั้งเดียวไม่ได้จัดเตรียมไว้ให้

การแยกย่อยแบบช็อตเดียว API ไม่ใช่การแฮชแบบเพิ่มหน่วยสำหรับไฟล์ขนาดใหญ่ SHA-256 ไม่ใช่รูปแบบการจัดเก็บรหัสผ่าน: แฮชที่ไม่ใส่เกลืออย่างรวดเร็วทำให้การเดาถูก ดังนั้นการจัดเก็บรหัสผ่านจึงจำเป็นต้องมี KDF ที่สร้างขึ้นตามวัตถุประสงค์ ประหยัด และจงใจมีค่าใช้จ่ายสูง SHA-1 อาจแสดงสำหรับการทำงานร่วมกันแบบเดิม แต่ความต้านทานการชนกันนั้นใช้งานไม่ได้ และไม่ใช่ตัวเลือกที่ดีสำหรับความสมบูรณ์หรือระบบลายเซ็นใหม่ HMAC เป็นการพิสูจน์ตัวตนแบบคีย์ ไม่ใช่การดำเนินการเดียวกันกับการแยกไบต์ที่ไม่ผ่านการตรวจสอบสิทธิ์

ประเด็นสำคัญ: เบราว์เซอร์มีฟังก์ชันแฮชอยู่แล้ว — เครื่องคำนวณแฮช ToolAcre SHA ใช้ API นี้ทุกประการ ดังนั้นเอาต์พุตจึงเป็นของเบราว์เซอร์เอง

เบราว์เซอร์มี SHA-256 อยู่แล้ว: เข้ารหัสข้อความเป็นไบต์ รอสรุป จากนั้นจัดรูปแบบผลลัพธ์เพื่อการเปรียบเทียบ ToolAcre SHA เครื่องคำนวณแฮชจะติดตามเส้นทางสำหรับข้อความที่วางและป้ายกำกับ SHA-1 เป็นแบบเดิมเท่านั้น เปรียบเทียบ abc กับผลลัพธ์ที่ทราบก่อน จากนั้นแฮชเนื้อหาที่ไม่ละเอียดอ่อนจริงซึ่งมีไบต์และการเข้ารหัสที่คุณเข้าใจ