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] Đánh giá độ ngẫu nhiên của khóa bí mật bằng Entropy Shannon

    Một cách định lượng phổ biến để phát hiện khóa bí mật / mật khẩu yếu (dễ đoán) là tính entropy Shannon của chuỗi ký tự tạo nên nó — entropy càng thấp thì chuỗi càng có tính lặp lại, càng dễ bị tấn công.

    Cho một chuỗi SSS độ dài nnn. Gọi pcp_cpc​ là tần suất xuất hiện tương đối của ký tự ccc trong SSS (số lần xuất hiện chia cho nnn). Entropy trên mỗi ký tự được định nghĩa:

    H=−∑cpclog⁡2(pc)H = -\sum_{c} p_c \log_2(p_c)H=−∑c​pc​log2​(pc​)

    và entropy tổng của toàn chuỗi là Htotal=H×nH_{total} = H \times nHtotal​=H×n (đơn vị: bit).

    Ví dụ: S=S = S= abcd (4 ký tự khác nhau, mỗi ký tự xuất hiện với xác suất 1/41/41/4) → H=−4×14log⁡214=2H = -4 \times \frac{1}{4}\log_2\frac{1}{4} = 2H=−4×41​log2​41​=2 bit/ký tự, Htotal=2×4=8H_{total} = 2 \times 4 = 8Htotal​=2×4=8 bit.

    • Định dạng đầu vào:

      Một dòng duy nhất chứa chuỗi SSS (có thể rỗng, có thể chứa khoảng trắng bên trong), độ dài tối đa 1000 ký tự ASCII in được. Đọc toàn bộ dòng (không tách theo khoảng trắng).

    • Định dạng đầu ra:

      In ra hai dòng:

      • Dòng 1: H_PER_CHAR: x với xxx là HHH làm tròn 4 chữ số thập phân.
      • Dòng 2: H_TOTAL: y với yyy là HtotalH_{total}Htotal​ làm tròn 4 chữ số thập phân.

      Nếu SSS rỗng, in ra H_PER_CHAR: 0.0000 và H_TOTAL: 0.0000.

      Ví dụ: input abcd → output:

      H_PER_CHAR: 2.0000
      H_TOTAL: 8.0000
      

    Ví dụ:

    Đầu vào:

    abcd

    Đầu ra:

    H_PER_CHAR: 2.0000
    H_TOTAL: 8.0000
    

    Đầu vào:

    aaaa

    Đầu ra:

    H_PER_CHAR: 0.0000
    H_TOTAL: 0.0000
    

    Đang tải editor...