0
0
Lập trình
TT

Kiến Thức Tổng Quan Về Mật Mã Học - Phần 2: Các Kỹ Thuật Mã Hóa Cơ Bản

Đăng vào 3 tuần trước

• 3 phút đọc

Chủ đề:

Cryptography

II. Các Kỹ Thuật Mã Hóa Cơ Bản (Phần Tiếp Theo)

3. Mã Hóa Base64

Mã hóa Base64 là một kỹ thuật phổ biến trong lĩnh vực mã hóa, cho phép mã hóa đối tượng thành dạng chuỗi ký tự an toàn bằng cách sử dụng bảng mã ASCII. Bảng mã này bao gồm các ký tự từ A-Z, a-z, 0-9, và các ký tự bổ sung như /+, cùng với ký tự đệm =. So với mã ASCII thông thường, trong mã hóa Base64, một ký tự chỉ cần 6 bit thay vì 8 bit, giúp tiết kiệm không gian lưu trữ.

Để thực hiện quá trình mã hóa từ một đối tượng sang dạng Base64, chúng ta cần thực hiện các bước sau:

  1. Chuyển đổi đối tượng sang dạng bit.
  2. Chia chuỗi bit thành từng nhóm 6 bit.
  3. Chuyển đổi từng nhóm bit thành ký tự tương ứng theo bảng mã Base64.
  4. Bổ sung ký tự đệm = nếu cần thiết.

Ví Dụ Mã Hóa Với Base64

Giả sử chúng ta muốn mã hóa từ Viblo sang dạng Base64:

  • Viblo01010110 01101001 01100010 01101100 01101111
  • Chia thành các nhóm 6 bit: 010101 100110 100101 100010 011011 000110 1111
  • Bổ sung thành 7 nhóm: 010101 100110 100101 100010 011011 000110 111100
  • Chuyển đổi sang ký tự Base64: V m l i b G 8

Kết quả của quá trình mã hóa từ Viblo sẽ là VmlibG8=. Quá trình giải mã có thể được thực hiện dễ dàng bằng cách làm ngược lại các bước mã hóa.

Base64 thường được sử dụng để truyền tải các tệp như hình ảnh, âm thanh và video. Tuy nhiên, trong thực tế, Base64 chủ yếu được sử dụng để mã hóa và truyền tải hình ảnh do kích thước của tệp âm thanh và video lớn.

Ví Dụ Mã Nguồn Trong Python

Ngôn ngữ Python hỗ trợ mã hóa Base64 thông qua module base64 với các hàm như base64.b64encode() để mã hóa và base64.b64decode() để giải mã.

python Copy
import base64

str = 'Base64_is_amazing'
str_en_b64 = base64.b64encode(str.encode())
print('Base64 encode: ', str_en_b64)

str_de_b64 = base64.b64decode(str_en_b64)
print('Base64 decode: ', str_de_b64)

III. Phép Toán XOR

XOR (Exclusive or) là một phép toán bit, các thao tác được thực hiện ở cấp độ từng bit riêng lẻ. Kết quả của phép toán giữa hai bit tùy thuộc vào mức độ tương đồng của chúng như trong bảng chân lý dưới đây:

A B A ⊕ B
0 0 0
0 1 1
1 0 1
1 1 0

Tính chất của phép toán XOR bao gồm: XOR với 0 giữ nguyên giá trị, XOR với chính nó trả về 0, và tính giao hoán và kết hợp. Trong Python, XOR được thực hiện bằng toán tử ^.

Challenge Luyện Tập: XOR Easy

Chuỗi cipher text đưa ra có thể là một chuỗi hex, và cần thực hiện phép toán XOR cùng một chuỗi key chưa được biết. Chúng ta có thể giải thích rằng key có thể là một ký tự dựa vào hint đã cho.

Có hai cách để tìm ra flag:

Hướng 1: Tấn Công Vét Cạn

Chúng ta có thể thử tất cả các giá trị ASCII cho ký tự key từ 0 đến 255 để tìm ra flag.

python Copy
import time

cipher = '321815130f0c44062b1d072b07441911001c451a4d09'
cipher = bytes.fromhex(cipher).decode()

key = 0
while True:
    flag = ''
    for i in cipher:
        flag += chr(key ^ ord(i))
    print('key: %s: flag = %s' % (key, flag))
    key += 1
    time.sleep(2)

Hướng 2: Tìm Ra Key Dựa Vào Flag

Biết rằng flag bắt đầu bằng Flag{..., chúng ta có thể tìm ra chuỗi key nhờ vào tính chất XOR:

python Copy
cipher = '321815130f0c44062b1d072b07441911001c451a4d09'
cipher = bytes.fromhex(cipher).decode()

key = chr(ord('F') ^ ord(cipher[0]))

flag = ''
for i in cipher:
    flag += chr(ord(key) ^ ord(i))

print(flag)

Tài Liệu Tham Khảo

Gợi ý câu hỏi phỏng vấn
Không có dữ liệu

Không có dữ liệu

Bài viết được đề xuất
Bài viết cùng tác giả

Bình luận

Chưa có bình luận nào

Chưa có bình luận nào