Điểm:0

Nghi ngờ về việc chuyển đổi hex thành byte trong đầu vào SHA-256

lá cờ br

Các hàm băm như SHA-256 lấy một chuỗi nhị phân làm đầu vào. Bây giờ được cung cấp một chuỗi hex khi chúng tôi chuyển đổi nó thành chuỗi văn bản bình thường, giá trị SHA-256 được tính toán sẽ giống nhau. Đây là vấn đề của tôi

Chúng ta hãy xem xét một chuỗi đơn giản trong hệ thập lục phân 2E; giá trị SHA-256 của nó là cdb4ee2aea69cc6a83331bbe96dc2caa9a299d21329efb0336fc02a82e1839a8.

Khi chuyển sang dạng byte ta có nên viết 46 hoặc 046. Trong cả hai trường hợp, đầu ra SHA-256 không khớp:

46 bạn sẽ nhận được 25fc0e7096fc653718202dc30b0c580b8ab87eac11a700cba03a7c021bc35b0c.

046 bạn sẽ nhận được b2d084ae2bd0f4b38953ea3adb009b4f059816f93392addbcfb373399f183e88.

Làm cách nào để chúng tôi chuyển đổi từ hệ thập lục phân sang byte để kết quả giống nhau? các quy tắc là gì? Theo như tôi biết thì SHA-256 yêu cầu định dạng byte.

Tôi đã sử dụng cái này (GitHub) phần mềm để tính toán các giá trị SHA-256.

Aman Grewal avatar
lá cờ gb
Trang web đó không có tùy chọn byte. Bạn đang nhập nó dưới dạng byte như thế nào?
J.Doe avatar
lá cờ br
có một tùy chọn văn bản trong trình đơn thả xuống. Tôi giả sử byte của nó?
fgrieu avatar
lá cờ ng
Câu hỏi là về SHA-256, không phải SHA khác (còn được gọi là SHA-0). SHA là tiền thân của SHA-1. Hóa ra nó không an toàn, thậm chí còn hơn cả SHA-1. Hàm băm thứ hai (tương ứng với thứ ba) được hiển thị là dành cho chuỗi hai ký tự (tương ứng với ba ký tự) `46` (tương ứng với `046`) khi được mã hóa thành nhiều byte trên mỗi ASCII hoặc UTF-8, tức là các byte 0x34 0x36 (tương ứng 0x30 0x34 0x36) trong đó tiền tố 0x dành cho hệ thập lục phân.
Điểm:7
lá cờ in

Chúng ta hãy xem xét một chuỗi đơn giản trong Hex: 2E Giá trị SHA của nó là:

cdb4ee2aea69cc6a83331bbe96dc2caa9a299d21329efb0336fc02a82e1839a8

Vâng đúng rồi.

Khi chuyển sang dạng byte ta nên viết 46 hay 046.

Không.

Toàn bộ ý tưởng sử dụng hệ thập lục phân cho byte là để biểu thị giá trị của byte. Cho nên 2E là biểu diễn thập lục phân của một byte đơn. Bạn cũng có thể sử dụng các biểu diễn khác như 00101110 ở dạng nhị phân.

Nếu bạn diễn giải nó dưới dạng văn bản ASCII thì đó sẽ là ký tự "dấu chấm". Cho nên printf "\x2E" | sha256sum giống như inf "." | sha256sum trên hầu hết các hệ thống. Vì vậy, trên trang web của bạn, bạn có thể chỉ cần sử dụng một dấu chấm dưới dạng văn bản. Cũng có thể làm điều này bằng cách sử dụng tiếng vang nhưng tiếng vang có quá nhiều vấn đề về tính di động để được coi là một giải pháp thay thế đáng tin cậy cho bản inf.

Nói chung, chúng tôi không biểu thị byte bằng số thập phân. Nếu bạn làm như vậy, có lẽ bạn sẽ phải lập trình nó một cách cụ thể. Chẳng hạn, trong Java, bạn có thể sử dụng byte b = 46 hoặc byte[] ba = { 46 } và sau đó sử dụng nó trong một thuật toán băm.Nếu bạn thực sự muốn lập trình nó bằng dòng lệnh thì printf "\x$(printf "%x" 46)" | sha256sum dường như làm việc.

J.Doe avatar
lá cờ br
Cảm ơn. Nhưng khi chúng ta khởi tạo dữ liệu, tức là w[i]'s trước khi chạy Thuật toán, chúng ta sẽ làm gì vì dữ liệu được yêu cầu tính bằng byte bởi các biến (w[i]'s) là 32 bit)? Chúng tôi có thay đổi dữ liệu thành nhị phân rồi gán hay chúng tôi làm việc trực tiếp trên Hex bằng cách lưu trữ chúng ở định dạng hex của w[i]. Tôi không nghĩ cái sau sẽ hoạt động và đưa ra hàm băm chính xác?
J.Doe avatar
lá cờ br
Tôi đang cố gắng viết SHA256 từ đầu và phần này rất khó hiểu. Phần logic còn lại có vẻ ổn.. Giả sử văn bản trong Hexa là: 2E 2F 05 EE sẽ được điền vào W[0]. Làm thế nào để chúng ta đi về nó và những gì sẽ là giá trị của nó?
Maarten Bodewes avatar
lá cờ in
Thông thường, chúng tôi tạo một giao diện sử dụng byte cho hàm băm SHA-256. Trong trường hợp đó, giá trị `2E 2F 05 EE` theo byte sẽ được chuyển đổi thành một từ duy nhất `0x2E2F05EE` khi xem triển khai SHA-256. Nhưng xin lưu ý rằng SHA-256 được định nghĩa là sử dụng **big** endian.Bạn **không bao giờ** nên sử dụng hệ thập lục phân được tạo từ một chuỗi, chỉ sử dụng byte và từ. Hệ thập lục phân chỉ hữu ích cho việc gỡ lỗi (tất nhiên trình gỡ lỗi có thể sử dụng chúng và bạn có thể sử dụng chúng trong các câu lệnh in hoặc theo dõi gỡ lỗi), bạn nên **không bao giờ** sử dụng chúng cho chính việc triển khai.
Maarten Bodewes avatar
lá cờ in
Bạn chỉ có thể * chuyển giá trị byte vào đúng vị trí, sử dụng `
Điểm:0
lá cờ ng
SSA
  • Danh sách mục

Tôi đã sử dụng python để mang lại sự khác biệt, khi bạn lấy 2E và chỉ mã hóa dưới dạng byte và cung cấp byte được mã hóa thành b'2E'.

  • python có một phương thức bytes. fromhex() cho ex..
  • v=byte.fromhex('474039')
  • ở đây v được in là b'G@9'
  • Để giải mã, hãy sử dụng binascii.hexlify(v) và đầu ra sẽ là b'474039' nhập mô tả hình ảnh ở đây

Đă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.