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] Mã hoá ASCII85 (Adobe Base85)

    ASCII85 (Base85 kiểu Adobe, dùng trong PostScript/PDF) là phép mã hoá nhị phân sang văn bản có mật độ cao hơn Base64 (mỗi 4 byte gốc chỉ cần 5 ký tự thay vì mỗi 3 byte cần 4 ký tự).

    Cho một chuỗi hex HHH (độ dài chẵn, có thể rỗng), biểu diễn một dãy byte DDD. Hãy mã hoá DDD theo thuật toán ASCII85 sau (không thêm dấu bao <~ ~>):

    1. Chia DDD thành các nhóm liên tiếp 4 byte.
    2. Với mỗi nhóm đủ 4 byte: coi 4 byte là một số nguyên 32-bit big-endian vvv; nếu v=0v = 0v=0 (cả 4 byte đều bằng 0) thì viết tắt thành một ký tự z; ngược lại, biểu diễn vvv trong hệ cơ số 85 bằng đúng 5 chữ số (chữ số có trọng số cao nhất trước), mỗi chữ số ddd (0≤d≤840 \le d \le 840≤d≤84) tương ứng ký tự có mã ASCII 33+d33 + d33+d (tức từ ! đến u).
    3. Với nhóm cuối cùng nếu chỉ còn mmm byte (1≤m≤31 \le m \le 31≤m≤3, không phải trường hợp m=4m=4m=4): đệm thêm 4−m4-m4−m byte giá trị 0 vào bên phải cho đủ 4 byte, tính đủ 5 ký tự như bước 2 (không áp dụng viết tắt z dù nhóm đó toàn số 0 sau khi đệm), rồi chỉ giữ lại m+1m+1m+1 ký tự đầu tiên trong 5 ký tự đó.
    4. Nếu DDD rỗng, in ra dòng rỗng.

    Ví dụ: với D=D = D= Man (4 byte: 4D 61 6E 20), kết quả mã hoá ASCII85 là 9jqo^.

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

      Một dòng duy nhất chứa chuỗi hex HHH (có thể rỗng, độ dài chẵn, tối đa 2000 ký tự).

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

      Một dòng chứa chuỗi ASCII85 mã hoá được từ dãy byte của HHH (dòng rỗng nếu HHH rỗng).

    Ví dụ:

    Đầu vào:

    Đầu ra:

    
    

    Đầu vào:

    00000000

    Đầu ra:

    z
    

    Đang tải editor...