Điểm:2

Làm cách nào để có hàm băm ánh xạ bất kỳ chuỗi nhị phân nào có kích thước n thành chuỗi nhị phân có kích thước n?

lá cờ mq

Tôi đang triển khai mật mã không chứng chỉ từ bài nghiên cứu này bằng ngôn ngữ trăn. Về cơ bản, tôi muốn có ánh xạ hàm băm sau. Hàm băm này đã được đề cập trong thuật toán thiết lập ở mục 2.4 của bài báo. Ở đây n là độ dài bit của bản rõ. $$\begin{align} H_4: \{0, 1\}^n\to\{0, 1\}^n\ \end{align}$$ Có bất kỳ hàm băm sẵn có nào trong thư viện hashlib python không? Hoặc làm cách nào tôi có thể xây dựng hàm băm này trong python?

Maarten Bodewes avatar
lá cờ in
Câu hỏi này bao gồm hai phần riêng biệt: tôi có thể sử dụng (loại) thuật toán băm nào và thuật toán băm nào có sẵn trong thư viện hashlib python. Nó dường như tập trung vào cái sau, và nói đúng ra thì đó là chủ đề trên trang web này.
Maarten Bodewes avatar
lá cờ in
Nó được chỉ định [tại đây](https://docs.python.org/3.9/library/hashlib.html#shake-variable-length-digests) - kể từ 3.6, đây là phiên bản lib cũ nhất vẫn được hỗ trợ. API đơn giản đến mức thực sự không có gì nhiều. Nó có thể yêu cầu thêm *bit* công việc nếu *n* của bạn không phải là bội số của 8, nhưng đó là về nó. Hãy thử và hỏi về [so] khi gặp khó khăn.
Maarten Bodewes avatar
lá cờ in
Tôi đã không trả lời vì nó có thể phù hợp hơn với SO, nhưng thực sự không thể bị lỗi khi chuyển đổi công thức đó thành hình ảnh. ashizz, vui lòng phản hồi về câu trả lời bạn nhận được ở đây và trên [vì vậy].
Điểm:1
lá cờ in

Có lẽ thuật toán tốt nhất để sử dụng là SHAKE được chỉ định cho Keccak, thuật toán này là người chiến thắng trong cuộc thi SHA-3. Bạn có thể sử dụng SHAKE128 hoặc SHAKE256 tùy thuộc vào sự cân bằng về hiệu suất và bảo mật mà bạn muốn đạt được.

Đối với Python, thuật toán được chỉ định đây và sẽ khả dụng kể từ 3.6, tức là tất cả các phiên bản được hỗ trợ. Bạn chỉ có thể tạo thuật toán băm (hay đúng hơn là XOF), hãy gọi cập nhật bao nhiêu lần bạn muốn trên đầu vào nhị phân và sau đó truy xuất kết quả bằng cách sử dụng tiêu hóa (tiêu hóaSize) gọi, ở đâu kích thước tiêu hóa tính bằng byte.


Nếu bạn yêu cầu một $n$ đó không phải là bội số của 8 (tức là đầu vào/đầu ra không được căn chỉnh theo byte), bạn có thể cần thực hiện một số thủ thuật, ví dụ: tiền tố số không vào đầu vào và loại bỏ các bit ngoài cùng bên trái khỏi đầu ra sau đó. Tất nhiên, điều đó giả định rằng $n$ không thay đổi hoặc bạn có thể gặp xung đột thông báo đầu vào. Mặc dù vậy, hầu hết các giao thức thực tế đã được thiết kế với các tham số đầu vào/đầu ra được căn chỉnh theo byte.

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