Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi

    solution

    Đề bài: [An toàn thông tin] Đào khối: tìm Nonce Proof-of-Work

    Cơ chế Proof-of-Work yêu cầu thợ đào tìm một giá trị nonce sao cho mã băm của dữ liệu khối kết hợp với nonce thỏa mãn một điều kiện độ khó cho trước. Trong bài này, điều kiện độ khó là: mã băm SHA-256 (dạng hex) phải có ít nhất kkk ký tự 0 liên tiếp ở đầu.

    Cho chuỗi data và độ khó kkk, hãy tìm giá trị nonce nhỏ nhất (bắt đầu thử từ nonce=0nonce=0nonce=0, tăng dần từng đơn vị: 0,1,2,…0,1,2,\dots0,1,2,…) sao cho:

    SHA256(data∥str(nonce))\text{SHA256}(\text{data} \parallel \text{str}(\text{nonce}))SHA256(data∥str(nonce))

    (nối chuỗi trực tiếp data với biểu diễn thập phân của nonce) có dạng hex bắt đầu bằng kkk ký tự 0.

    Ví dụ: với data="hello", k=1k=1k=1, giá trị nonce nhỏ nhất thỏa mãn là 282828, cho mã băm bắt đầu bằng 0.

    • Định dạng đầu vào:
      • Dòng 1: data — chuỗi bất kỳ (có thể chứa khoảng trắng, lấy nguyên vẹn nội dung dòng).
      • Dòng 2: kkk — số nguyên, 0≤k≤50 \le k \le 50≤k≤5 (số ký tự 0 đầu tiên yêu cầu).
    • Định dạng đầu ra:

      Hai dòng:

      • Dòng 1: giá trị nonce nhỏ nhất tìm được.
      • Dòng 2: mã băm SHA-256 tương ứng (dạng hex chữ thường, 64 ký tự).

    Ví dụ:

    Đầu vào:

    hello
    0
    

    Đầu ra:

    0
    5a936ee19a0cf3c70d8cb0006111b7a52f45ec01703e0af8cdc8c6d81ac5850c
    

    Đầu vào:

    hello
    1
    

    Đầu ra:

    28
    02a13c40ba00dc0fb199d3cbe5b01be59d937775890243fd411bdf001935ffc8
    

    Đang tải editor...