ฉันกำลังพยายามเขียนโค้ด SHA256 ตั้งแต่เริ่มต้นเพื่อทำความเข้าใจการใช้งานตามรหัสเทียมของ wiki ซึ่งมีความชัดเจนเพียงพอ แต่ฉันประสบปัญหากับการคำนวณ W[i] สำหรับบล็อกแรก ฉันแน่ใจว่าฉันขาดตรรกะที่ไหนสักแห่ง กำหนดสตริงข้อมูลขนาด 80 ไบต์ (เป็นฐานสิบหก): "02000000AAF8AB823623444F49083EE4EDEF795362CF135293564C407000000000000000000009BB62222222222203FA203FA203FA203FAR69633FAR69633FAR69633FAR6963FAR69633"
หลังจากขยายผลลัพธ์ในสตริงข้อมูล 128 ไบต์ (เป็นฐานสิบหก):
"02000000aaf8ab82362344f49083ee4edef795362cf135293564c4070000000000000000c009bb6222e9bc4cdb8f26b2e8a2f8d163509691a4038fa692abf9a474c9b21476800755c02e17181fe6c1c3800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280"
ตอนนี้แบ่งออกเป็น 2 ชิ้น ๆ ละ 64 ไบต์:
"02000000aaf8ab82362344f49083ee4edef795362cf135293564c4070000000000000000c009bb6222e9bc4cdb8f26b2e8a2f8d163509691a4038fa692abf9a4"
"74c9b21476800755c02e17181fe6c1c3800000000000000000000000000000000000000000000000000000000000000000000000000000000000002"
ตอนนี้เมื่อเราเริ่มประมวลผลอันแรก เราจะเติมอาร์เรย์กำหนดการข้อความ 64 รายการด้วยคำ 32 บิต [0..63] วิกิ พูดว่า:
"(ค่าเริ่มต้นใน w[0..63] ไม่สำคัญ การใช้งานจำนวนมากจึงเป็นศูนย์ที่นี่)"
คัดลอกกลุ่มเป็น 16 คำแรกด้วย [0..15] ของอาร์เรย์กำหนดเวลาข้อความ
ดังนั้นฉันจึงพยายามเติมอาร์เรย์กำหนดการข้อความดังนี้:
ว[0]=0200
ว[1]=0000
W[2]=aaf8
W[3]=ab82
W[4]=3623 ไปเรื่อยๆ จนถึง W[15]
ค่า W[16] ถึง W[63] ถูกตั้งค่าเป็น 0 ทั้งหมด
แต่ค่าเหล่านี้ดูเหมือนไม่ถูกต้อง ฉันทำอะไรผิดที่นี่ มีคนช่วยชี้ว่ามีอะไรผิดปกติที่นี่ได้ไหม