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] Chuỗi băm khối kiểu blockchain

    Trong các hệ thống blockchain, tính toàn vẹn của dữ liệu lịch sử được đảm bảo bằng cách băm nối tiếp (hash chaining): giá trị băm của khối sau phụ thuộc vào giá trị băm của khối liền trước, khiến việc sửa đổi một khối cũ làm thay đổi toàn bộ các khối phía sau.

    Cho một chuỗi khởi tạo genesis và nnn khối dữ liệu d1,d2,…,dnd_1, d_2, \ldots, d_nd1​,d2​,…,dn​ (mỗi khối là một dòng văn bản, có thể là chuỗi rỗng). Định nghĩa dãy băm SHA-256 (biểu diễn dạng hex, chữ thường) như sau:

    h0=SHA256(genesis)h_0 = \text{SHA256}(genesis)h0​=SHA256(genesis) hi=SHA256(hi−1∥di),i=1,…,nh_i = \text{SHA256}(h_{i-1} \Vert d_i), \quad i = 1, \ldots, nhi​=SHA256(hi−1​∥di​),i=1,…,n

    trong đó ∥\Vert∥ là phép nối chuỗi giữa chuỗi hex của hi−1h_{i-1}hi−1​ và chuỗi did_idi​ (nối trực tiếp, không thêm ký tự phân cách).

    Hãy tính hnh_nhn​ — giá trị băm của khối cuối cùng trong chuỗi.

    Ví dụ: Với genesis = "NEU" và n=0n = 0n=0 (không có khối nào), kết quả chính là h0=SHA256("NEU")h_0 = \text{SHA256}(\text{"NEU"})h0​=SHA256("NEU").

    Lưu ý: Nếu n=0n = 0n=0, chỉ in ra h0h_0h0​.

    • Định dạng đầu vào:
      • Dòng 1: chuỗi genesis (có thể rỗng).
      • Dòng 2: số nguyên nnn (0≤n≤10000 \le n \le 10000≤n≤1000).
      • nnn dòng tiếp theo: nội dung từng khối d1,…,dnd_1, \ldots, d_nd1​,…,dn​ (mỗi khối một dòng, có thể là chuỗi rỗng).
    • Định dạng đầu ra:

      In ra duy nhất một dòng: giá trị hnh_nhn​ dạng chuỗi hex 64 ký tự thường.

    Ví dụ:

    Đầu vào:

    
    1
    a
    

    Đầu ra:

    f077eaefcc4ec4f1afbd07a79c7c3783f0420897151cfb79d1c8286d69867712
    

    Đầu vào:

    NEU
    0
    

    Đầu ra:

    c8c6181904ce439b863ed171b55f759ba6c6f876d3e588f956b415c3f3e480aa
    

    Đang tải editor...