sách gpt4 ai đã đi

Một bài viết giúp bạn hiểu các nguyên tắc của Base64

In lại Tác giả:qq735679552 Thời gian cập nhật: 2022-09-29 22:32:09 28 4
mua khóa gpt4 Nike

CFSDN nhấn mạnh vào việc tạo ra giá trị thông qua mã nguồn mở. Chúng tôi cam kết xây dựng một nền tảng chia sẻ tài nguyên để mọi người làm CNTT có thể tìm thấy thế giới tuyệt vời của riêng mình tại đây.

Bài đăng trên blog CFSDN này sẽ giúp bạn hiểu các nguyên tắc của Base64. Bài đăng được tác giả thu thập và biên soạn. Nếu bạn quan tâm đến bài viết này, vui lòng thích nó.

Một bài viết giúp bạn hiểu các nguyên tắc của Base64

Cơ sở64

Base64 là gì? Đây là thuật toán chuyển đổi luồng byte thành ký tự có thể in và chuyển đổi ký tự có thể in thành luồng byte. Base64 sử dụng 64 ký tự có thể in được để biểu diễn dữ liệu đã chuyển đổi.

Nói một cách chính xác, Base64 không phải là thuật toán mã hóa hay giải mã, mà là thuật toán mã hóa hoặc giải mã. Đây là lý do tại sao tôi sử dụng thuật ngữ mã hóa và giải mã thay vì mã hóa và giải mã.

Nguyên lý mã hóa

Cuộc thảo luận ở đây giả định sử dụng mã hóa UTF-8.

Nguyên lý của thuật toán Base64 là chia các byte trong luồng đầu vào thành các nhóm 3, sau đó lấy 6 bit mỗi lần và chuyển đổi chúng thành dữ liệu tương ứng trong bảng, lặp lại cho đến khi không còn ký tự nào. Bảng chuyển đổi như sau:

Một bài viết giúp bạn hiểu các nguyên tắc của Base64

Quá trình mã hóa

Ví dụ, giả sử chúng ta muốn mã hóa chuỗi SH:

  1. Chuyển đổi nó sang hệ thập lục phân là 53, 2e, 48
  2. Sau đó chuyển đổi hệ thập lục phân sang hệ nhị phân, tương ứng là 01010011, 00101110, 01001000. Ở đây, các bit cao nhỏ hơn 8 bit có thể được điền bằng 0.
  3. Chia mỗi 6 bit thành một nhóm, cụ thể là 010100, 110010, 111001, 001000
  4. Chuyển đổi nó sang số thập phân và bạn sẽ nhận được 20, 50, 57, 8
  5. Theo mối quan hệ chuyển đổi trong bảng, ta có thể thu được U, y, 5, I

Nói cách khác, chuỗi SH được mã hóa bằng thuật toán Base64 để tạo ra Uy5I.

Sơ đồ mã hóa

Nếu bạn thấy văn bản khó hiểu, tôi đã vẽ quy trình trên dưới dạng sơ đồ, bạn có thể cùng đọc.

Một bài viết giúp bạn hiểu các nguyên tắc của Base64

Tại sao chúng ta chia ba thành các nhóm? Bởi vì 3 8 = 24, 24 = 4 6, do đó chúng ta có thể chia đều chúng.

Nếu tôi nhập ít hơn ba byte thì sao?

Ví dụ, SH? Thực hiện theo các bước trên:

Đầu tiên chuyển đổi nó thành hệ thập lục phân 53, 48, sau đó chuyển đổi nó thành hệ nhị phân 01010011, 01001000, rồi chia thành các nhóm 6 bit, nó sẽ trở thành 010100, 110100, 1000, rồi chuyển đổi nó thành hệ thập phân để có được 20, 52, 8 và cuối cùng có được U0I.

Tuy nhiên, kết quả này không đúng. Nếu bạn sử dụng bất kỳ công cụ chuyển đổi đầu vào nào, bạn sẽ biết rằng kết quả cuối cùng là U0g=. Điều này cũng cho thấy rằng khi các ký tự đầu vào nhỏ hơn 3, nó không được xử lý theo cách trước đó.

Làm thế nào để xử lý ít hơn ba byte?

Giả sử chuỗi được mã hóa vẫn là SH.

Chuyển đổi nó thành nhị phân, 01010011, 01001000 và chia thành các nhóm 6 bit, nó sẽ trở thành 010100, 110100, 1000.

Tuy nhiên, có thể thấy rằng nhóm bit cuối cùng nhỏ hơn 6. Trong trường hợp này, bit cuối (bit thấp) sẽ được đệm bằng 0. Sau khi hoàn thành, nó sẽ trở thành 010100, 110100, 100000. Nhưng bạn sẽ thấy rằng chỉ có tổng cộng 18 bit, không đáp ứng nguyên tắc 3 byte trong một nhóm. Trong trường hợp này, ba nhóm đầu tiên được mã hóa như bình thường bằng Base64 và nhóm bị thiếu được đệm bằng =.

Theo cách này, nó sẽ trở thành 20, 52, 32, và sau đó theo bảng, chúng ta có thể nhận được U0g, và thêm dấu = cuối cùng, kết quả cuối cùng là U0g=.

Sau đây là sơ đồ.

Một bài viết giúp bạn hiểu các nguyên tắc của Base64

Làm thế nào để xử lý chỉ một byte?

Tương tự như vậy, nếu chỉ có một ký tự, khi cuối cùng được nhóm lại theo hệ nhị phân, các bit bậc thấp nhỏ hơn 6 bit sẽ được điền bằng 0, và nếu nhóm nhỏ hơn 4, sẽ được điền trực tiếp bằng dấu =. Ví dụ, giả sử chuỗi S cần được mã hóa.

Số nhị phân của S là 01010011, được chia thành các nhóm 6 bit: 010100, 11. Nhóm thứ hai rõ ràng là ít hơn 6 bit, vì vậy các bit thấp được điền bằng 0.

Sau khi điền các bit thấp bằng 0, kết quả sẽ trở thành 010100, 110000. Chỉ có 2 nhóm ở đây, ít hơn bốn nhóm, do đó cần điền 2 = vào đây. Chuyển đổi hai nhóm đầu tiên thành ký tự, kết quả là Uw, sau đó kết hợp với ký tự điền, kết quả cuối cùng là Uw==.

Về mã hóa, một số người có thể nói rằng đây là tất cả tiếng Anh và rất tiện lợi khi chuyển đổi tiếng Anh thành thập phân rồi thập lục phân, chỉ cần so sánh mã ASCII, nhưng tiếng Trung thì sao? Trên thực tế, điều này liên quan đến danh mục mã hóa được áp dụng. Sử dụng các mã hóa khác nhau cho cùng một ký tự tiếng Trung có thể mang lại kết quả khác nhau. Vì vậy, ở đây chúng ta chỉ thảo luận về trường hợp sử dụng UTF-8.

Nếu là tiếng Trung, nó sẽ được mã hóa bằng UTF-8, và nếu là tiếng Anh, kết quả chuyển đổi sẽ giống như mã hóa ASCII.

Nguyên lý giải mã

Bởi vì trong sản phẩm được mã hóa cuối cùng, nếu nhóm 6 bit nhỏ hơn 4 nhóm, sẽ có = làm phần đệm, do đó tích base64 luôn chia hết cho 4.

Do đó, trong quá trình giải mã, chúng ta cần xử lý 4 ký tự mỗi lần, mã hóa 4 ký tự này, chuyển chúng thành thập phân, sau đó chuyển chúng thành nhị phân, điền các bit cao nhỏ hơn 6 bit bằng 0, sau đó chia số nhị phân 6 bit thành các nhóm 8 bit theo thứ tự ban đầu, tức là mỗi nhóm một byte. Sau đó chuyển đổi nó thành hệ thập lục phân và thành ký tự tương ứng.

Quá trình giải mã

Giả sử ký tự chúng ta cần giải mã là Uy5I.

Quá trình giải mã sẽ như sau:

Theo nguyên lý xử lý 4 ký tự cùng lúc, chúng được chuyển đổi lần lượt thành số thập phân 20, 50, 57 và 8 theo bảng.

Sau đó chuyển đổi nó thành nhị phân, điền các bit cao nhỏ hơn sáu bit bằng số 0, rồi chia thành các nhóm gồm 8 bit.

Chuyển đổi các bit được nhóm lại thành hệ thập lục phân và bạn sẽ nhận được 53, 2e, 48.

Cuối cùng, chuyển đổi hệ thập lục phân thành các chữ cái để có được S, ., H, tức là SH.

Sơ đồ giải mã

Về mặt hình ảnh thì nó trông như thế này.

Một bài viết giúp bạn hiểu các nguyên tắc của Base64

Ở đây chúng ta đang giải quyết một tình huống lý tưởng, vì tất cả các bit đều được điền đầy. Vậy làm thế nào để giải mã base64 bằng = padding?

Ở đây chúng ta lấy chuỗi base64 được mã hóa SH là U0g= làm ví dụ.

  1. Đầu tiên, theo bảng, chuyển đổi nó thành số thập phân 20, 50, 32
  2. Sau đó chuyển đổi nó thành nhị phân, điền các bit cao nhỏ hơn 6 bit bằng 0, 010100, 110100, 100000
  3. Sau đó chia thành các nhóm 8 bit, 01010011, 01001000,
  4. Sau đó chuyển đổi nó thành hệ thập lục phân để có được 53, 48
  5. Chuyển đổi thành chuỗi để lấy SH

Một bài viết giúp bạn hiểu các nguyên tắc của Base64

Liên kết gốc: https://mp.weixin.qq.com/s/wHSDQK8IQD2pBMWoqK9qLg.

Cuối cùng, bài viết này về một bài viết sẽ giúp bạn hiểu các nguyên tắc của Base64 kết thúc tại đây. Nếu bạn muốn biết thêm về một bài viết sẽ giúp bạn hiểu các nguyên tắc của Base64, vui lòng tìm kiếm các bài viết trên CFSDN hoặc tiếp tục duyệt các bài viết liên quan. Tôi hy vọng bạn sẽ ủng hộ blog của tôi trong tương lai! .

28 4 0
qq735679552
Hồ sơ cá nhân

Tôi là một lập trình viên xuất sắc, rất giỏi!

Nhận phiếu giảm giá Didi Taxi miễn phí
Mã giảm giá Didi Taxi
Giấy chứng nhận ICP Bắc Kinh số 000000
Hợp tác quảng cáo: 1813099741@qq.com 6ren.com