ชื่อของคำถาม (ตอนนี้) ถามว่า "บิตแรกของบิตสตริงคืออะไร" นั่นจะไม่คลุมเครือหากบิตถูกนำเสนอทีละรายการตามลำดับเวลา หรือเป็นลายลักษณ์อักษรในบริบทที่มีลำดับการอ่านแบบเดิม เช่น ซ้ายไปขวา
แต่เนื้อหาของคำถามเกี่ยวกับ "สตริงที่สร้างจาก sha256" ที่จะอ่านเป็น SHA-256 กำหนดโดย ม.ป.ป.180-4. เป็นอัลกอริทึมที่ส่งออก "สตริงบิต" ของ $256$ บิตและไม่สามารถระบุได้ทันที
เนื้อความของคำถามมี x =
ติดตามโดย $64$ อักขระทั้งหมดทั้งตัวเลขหรือตัวอักษรจาก ก
ถึง ฉ
(ในเครื่องแบบตัวพิมพ์เล็กที่นี่) ซึ่งก็คือ $16=2^4$ ตัวละคร นั่นบ่งบอกว่าผลลัพธ์ของ SHA-256 ถูกเข้ารหัส เลขฐานสิบหกโดยอักขระแต่ละตัวเข้ารหัส 4 บิต (สังเกต $256=64\times4$). นี่เป็นหนึ่งในหลาย ๆ การแสดงบิตสตริงเป็นอักขระทั่วไป
มีหลายวิธีที่แตกต่างกันและเข้ากันไม่ได้ในการแปลงเลขฐานสิบหกเป็นบิต แต่โชคดีที่ในกรณีของ SHA-256 วิธีหนึ่งระบุไว้ใน 3.1 ย่อหน้าย่อย 2 บน หน้าที่ทำเครื่องหมาย 7 ของ FIPS 180-4 (ต้องอ่าน). โดยสรุป บิตที่สำคัญที่สุดจะอยู่อันดับแรก ไม่ว่าจะเป็นระดับ nibble (4 บิต) ไบต์ (8 บิต) หรือเวิร์ด (32 บิตในกรณีของ SHA-256)
จึงไปหาก่อน $i$ บิตสำหรับแฮช SHA-256 ที่เราทำได้
สิ่งนี้ใช้กับแฮชทั้งหมดของตระกูล SHA (การแทนที่ $256$ ด้วยความกว้างเอาต์พุต) หากไม่มีข้อกำหนดอื่น ๆ ก็สมเหตุสมผลที่จะนำไปใช้กับแฮชมาตรฐานอื่น ๆ ซึ่งความกว้างของเอาต์พุตเป็นทวีคูณ $32$ (หรือแม้กระทั่ง $8$ หรือ $4$) บิต นั่นเป็นที่ถกเถียงกันสำหรับ MD5 เนื่องจากใช้เพียงเล็กน้อยเอนเดียน การประชุมในลำดับไบต์ภายใน $32$บิตคำและฉันจะไม่สุ่มสี่สุ่มห้าขยายไปยังปริมาณอื่น ๆ ที่ใช้ในการเข้ารหัสและยังแสดงเป็นเลขฐานสิบหกเช่นจำนวนเต็มที่ใช้ใน RSA