Điểm:0

Chức năng nén SHA-256 mà không cần đệm

lá cờ fr

Nhìn vào ví dụ về đầu vào null (512 bit), nó nhận làm đầu vào:

đầu vào (Hex): 000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000000

Vì nó chính xác là 512 bit nên không có sự phân tách và không có phần đệm. Nhưng từ các máy tính trực tuyến hoặc mã golang, tôi sẽ nhận được hàm băm sha-256 của đầu vào null là:

đầu ra máy tính trực tuyến (Hex): f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b

Tuy nhiên, trong một số thư viện, ví dụ:.kobigurk hoặc SCALA MAMBA v.v., giá trị mong đợi phải là:

thư viện (Hex): da5698be17b9b46962335799779fbeca8ce5d491c0d26243bafef9ea1837a9d8

Tôi đã chọn đầu vào null chính xác là 512 bit mà không cần đệm. Điều gì có thể là vấn đề?

kelalaka avatar
lá cờ in
Phần đệm luôn được áp dụng bất kể kích thước của đầu vào.
Willi avatar
lá cờ fr
Bạn có thể cung cấp một số tài liệu tham khảo? Phần đệm sẽ áp dụng như thế nào nếu đầu vào chỉ có 512 bit?
Điểm:1
lá cờ in

Câu trả lời ngắn;

Bạn đang trộn hàm nén và hàm băm. Cả hai trang/thư viện đều đúng với ngữ cảnh của chúng!


câu trả lời mở rộng

SHA-256 giống như các thuật toán băm khác luôn được đệm và nó được định nghĩa trong NIST.FIPS.180-4

Giả sử độ dài của tin nhắn $M$, Trong các bit, $\ell$ là bit. Nối bit 1 đến cuối tin nhắn, tiếp theo là k bit không, ở đâu k là nghiệm không âm nhỏ nhất của phương trình $$\ell +1 + k \equiv 448 \bmod 512$$ Sau đó, nối thêm khối 64 bit bằng số $\ell$ được thể hiện bằng cách sử dụng biểu diễn nhị phân

Vì vậy, 512 bit số không trong SHA-256 sẽ có 447 số không ($k$ phần);

$$\text{Padded_Message} =\underbrace{\texttt{000...00}}_{512-zeros}||\texttt{1}||\underbrace{\texttt{000...00}}_ {447-zeros}||\underbrace{\texttt{leng encoding}}_{64-bit}$$

Nếu bạn thực sự muốn kiểm tra một số đầu vào, hãy đảm bảo rằng chúng chính xác trên các vectơ kiểm tra của NIST được xác định trong Chương trình xác thực thuật toán mật mã - Hàm băm

Đối với phần đệm, như thường lệ, không liên quan đến người dùng. Các thư viện xử lý phần đệm cho người dùng.

Vì nó chính xác là 512 bit nên không có sự phân tách và không có phần đệm. Nhưng từ các máy tính trực tuyến hoặc mã golang, tôi sẽ nhận được hàm băm sha-256 của đầu vào null là:

Như đã đề cập ở trên, phần đệm luôn được xác định. Nó là một phần của thuật toán băm SHA-256.

Đầu vào của bạn không phải là đầu vào rỗng, đó là đầu vào bằng không 512 bit. NIST cung cấp vectơ kiểm tra độ dài bằng 0 và kết quả là

Len = 0
tin nhắn = 00
MD = e3b0c44298fc1c149afbf4c8996fb92427ae41e4649b934ca495991b7852b855

Kiểm tra đầu vào của bạn trên sha256algorithm.com sản xuất

f5a5fd42d16a20302798ef6ed309979b43003d2320d9f0e8ea9831a92759fb4b

Tôi cũng đã kiểm tra trang này trên một số vectơ thử nghiệm của NIST.

Liên kết bạn cung cấp dưới dạng SCALA MAMBA đề cập như;

Đầu ra: Xâu chuỗi các giá trị sau khi nén khối đầu vào (có cùng định dạng với thông báo sẽ được trả về)
QUAN TRỌNG: Đây KHÔNG phải là các vectơ kiểm tra cho hàm băm SHA-256 hoàn chỉnh, vì các quy tắc đệm bị bỏ qua

Đây là đầu ra của chức năng nén đầu tiên. Điều này có thể được kiểm chứng trên sha256algorithm.com nếu bạn dừng lại ở bước thứ 164. Đặt chuột vào các giá trị ban đầu và bạn sẽ nhận được giá trị hex;

da5698be17b...

Điều này cũng tương tự trên liên kết khác đến; đưa ra như vectơ kiểm tra nén sha256.

Hãy nhớ đầu ra của hàm nén là giá trị ban đầu của hàm nén tiếp theo nếu cần. Nếu không cần thiết, thì đó là đầu ra của SHA-256. Các giá trị ban đầu đầu tiên được đưa ra;

Những từ này đại diện cho ba mươi hai bit đầu tiên của các phần phân số của căn bậc ba của sáu mươi bốn số nguyên tố đầu tiên

như một khong-up-im-my-tay-số mặc dù đây là tâm lý.

Willi avatar
lá cờ fr
cảm ơn! điều này thực sự hữu ích.
Willi avatar
lá cờ fr
một câu hỏi tiếp theo: Tôi có thể tìm ra giá trị băm ban đầu H(0) cho khối đầu tiên trong trang web được cung cấp [sha256algorithm.com](https://sha256algorithm.com/) ở bước nào? Có vẻ như giá trị băm ban đầu cho khối đầu tiên không được cung cấp.
kelalaka avatar
lá cờ in
Nhìn vào bước 50 ...

Đăng câu trả lời

Hầu hết mọi người không hiểu rằng việc đặt nhiều câu hỏi sẽ mở ra cơ hội học hỏi và cải thiện mối quan hệ giữa các cá nhân. Ví dụ, trong các nghiên cứu của Alison, mặc dù mọi người có thể nhớ chính xác có bao nhiêu câu hỏi đã được đặt ra trong các cuộc trò chuyện của họ, nhưng họ không trực giác nhận ra mối liên hệ giữa câu hỏi và sự yêu thích. Qua bốn nghiên cứu, trong đó những người tham gia tự tham gia vào các cuộc trò chuyện hoặc đọc bản ghi lại các cuộc trò chuyện của người khác, mọi người có xu hướng không nhận ra rằng việc đặt câu hỏi sẽ ảnh hưởng—hoặc đã ảnh hưởng—mức độ thân thiện giữa những người đối thoại.