Tôi đang cố viết mã SHA256 từ đầu để hiểu cách triển khai của nó dựa trên mã giả wiki đủ rõ ràng. Nhưng tôi đang gặp vấn đề với việc tính toán W[i] cho khối đầu tiên. Tôi chắc chắn rằng tôi đang thiếu logic ở đâu đó. Đưa ra một chuỗi dữ liệu có kích thước 80 Byte (ở dạng Hex): "0200000000AAF8AB823623444F49083EC"
Sau khi đệm, kết quả là chuỗi dữ liệu 128 Byte (ở dạng Hex):
"02000000aaf8ab82362344f49083ee4edef795362cf135293564c4070000000000000000c009bb6222e9bc4cdb8f26b2e8a2f8d163509691a4038fa692abf9a474c9b21476800755c02e17181fe6c1c3800000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280"
Bây giờ phần này được chia thành 2 phần 64 Byte mỗi phần:
"02000000aaf8ab82362344f49083ee4edef795362cf135293564c4070000000000000000c009bb6222e9bc4cdb8f26b2e8a2f8d163509691a4038fa692abf9a4"
"74c9b21476800755c02e17181fe6c1c38000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000280"
Bây giờ khi chúng tôi bắt đầu xử lý đoạn đầu tiên, làm cách nào để điền vào mảng lịch trình thông báo 64 mục nhập w[0..63] gồm các từ 32 bit. Wiki nói:
"(Các giá trị ban đầu trong w[0..63] không thành vấn đề, rất nhiều triển khai không có chúng ở đây)"
sao chép đoạn vào 16 từ đầu tiên w[0..15] của mảng lịch trình thông báo
Vì vậy, tôi cố gắng điền vào mảng lịch trình tin nhắn như sau:
W[0]=0200
W[1]=0000
W[2]=aaf8
W[3]=ab82
W[4]=3623 và cứ thế cho đến W[15].
Các giá trị W[16] đến W[63] đều được đặt thành 0.
Nhưng những giá trị này có vẻ không chính xác. Tôi làm gì sai ở đây. Ai đó có thể vui lòng chỉ ra những gì là sai ở đây?