Các lượt nộp
    Danh sách bài
    Trang chủ
    Báo lỗi
    solution
    Đăng nhập
    Đăng nhập

    Đề bài: Mã hoá và giải mã file nhị phân bằng XOR với khoá byte

    📖Cần ôn lý thuyết? Đọc bài giảng Buổi 8: Dòng dữ liệu vào/ra và tệp — khóa Lập trình Java

    Viết chương trình mô phỏng mã hoá XOR đơn giản:

    1. Dòng đầu stdin là key (số nguyên 0..255).
    2. Dòng 2 là N, sau đó là N giá trị nguyên 0..255 — đại diện cho N byte plaintext.
    3. Ghi N byte đó vào file plain.bin bằng FileOutputStream.
    4. Đọc lại plain.bin bằng FileInputStream, XOR từng byte với key, ghi kết quả vào cipher.bin bằng FileOutputStream. Sao chép theo buffer 256 byte.
    5. Đọc lại cipher.bin, XOR từng byte với key lần nữa, ghi vào decrypted.bin (cũng dùng buffer 256).
    6. Đọc lại decrypted.bin và so sánh từng byte với plain.bin. In:
      cipherSum: <tổng byte unsigned trong cipher.bin>
      match: <true|false>
      

    Quy ước: file rỗng → match = true, cipherSum = 0.

    • Định dạng đầu vào:
      • Dòng 1: key (0..255)
      • Dòng 2: N (0 ≤ N ≤ 10⁴)
      • Tiếp theo: N giá trị 0..255
    • Ràng buộc đầu vào:

      0 ≤ byte ≤ 255

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

      2 dòng cipherSum: ... và match: <true|false>

    Ví dụ:

    Đầu vào:

    42
    5
    10 20 30 40 50
    

    Đầu ra:

    cipherSum: 172
    match: true
    

    Giải thích:

    key=42. cipher byte = plain XOR 42. Sau khi giải mã (XOR lại) phải bằng plain → match=true.

    Đầu vào:

    0
    4
    1 2 3 4
    

    Đầu ra:

    cipherSum: 10
    match: true
    

    Giải thích:

    key=0 → cipher = plain. cipherSum = 1+2+3+4 = 10. match=true.

    Đầu vào:

    255
    0
    

    Đầu ra:

    cipherSum: 0
    match: true
    

    Giải thích:

    File rỗng → cipherSum=0, match=true.

    Đầu vào:

    170
    3
    255 0 170
    

    Đầu ra:

    cipherSum: 255
    match: true
    

    Giải thích:

    key=170 (0xAA). 255^170=85, 0^170=170, 170^170=0. cipherSum=85+170+0=255. match=true.

    Đầu vào:

    1
    8
    10 20 30 40 50 60 70 80
    

    Đầu ra:

    cipherSum: 368
    match: true
    

    Giải thích:

    Lật bit cuối.

    Chủ đề

    ☕ JavaJavaIOTất cả môn học

    Đang tải editor...