Mã hóa javascript base64

Chào mọi người, trong bài viết hôm nay mình xin cố gắng đi sâu vào một khái niệm mà có lẽ tất cả chúng ta đều đã từng gặp và sử dụng khá nhiều trong công việc, đặc biệt là trong các thao tác với file và ảnh. Đó là khái niệm base64 hay thường được gọi đầy đủ là base64 encoding có thể nhiều khi bạn cũng từng thắc mắc là sao chúng ta có thể tải lên một tệp ảnh, làm sao để lưu ảnh vào cơ sở dữ liệu thay vì chỉ lưu đường dẫn . Đôi khi cố gắng tìm hiểu một thứ mà cũ cũ cũng khá là thú vị

Hướng dẫn base64 encode python

1. Khái niệm

base64 là phương thức chuyển đổi dạng mã hóa 2 chiều từ binary sang string để có thể gửi đi trong mạng một cách dễ dàng. Các nhị phân lúc này sẽ được hiển thị bằng các ký tự mã ASCII

Hướng dẫn base64 encode python

Sự ra đời của base64 bắt nguồn từ việc mong muốn gửi một kết quả Email sử dụng tiêu chuẩn SMPT, tuy nhiên tiêu chuẩn SMTP chỉ cho phép chuyển các ký tự ASCII sử dụng 7 bit có giá trị từ 0-127. Nhưng một tệp nhị phân bao gồm các byte có giá trị 0-255 nên trước tiên chúng ta cần chuyển đổi nó để có thể sử dụng được SMTP

Rõ ràng mã ASCII có 128 giá trị nhưng tại sao lại là base64 mà không phải là base128, đơn giản là vì không phải 128 mã ASCII đều có thể sử dụng được. Ví dụ CR/LF tương ứng là 13 và 10 trong mã ASCII được sử dụng để biểu thị công việc kết thúc dòng trong SMTP cho nên việc sử dụng cặp ký tự này là không cần thiết và còn nhiều cặp ký tự tương tự như vậy nên thay thế vì

2. Base64 hoạt động như thế nào?

Để hiểu rõ hơn và khái niệm base64 mà không phải là base69 chúng ta cùng xem ví dụ sau để hiểu rõ hơn về cơ chế chuyển đổi dữ liệu từ chuỗi nhị phân sang chuỗi như thế nào

Complete process THEO 4 BƯỚC

  1. Dữ liệu nhị phân được sắp xếp theo từng khối 24 bit (3 byte) liên tục
  2. Mỗi đoạn 24 bit được nhóm thành bốn phần 6 bit mỗi phần
  3. Mỗi nhóm 6 bit được chuyển đổi thành các giá trị ký tự Base64 tương ứng của chúng. Mã hóa Base64 chuyển ba octet thành bốn ký tự đã được mã hóa. (mỗi octet có 8 bit dữ liệu)
  4. Người nhận sẽ phải đảo ngược quá trình này để khôi phục ban đầu thông báo

Vị trí thực sự là các ký tự giống nhau sẽ được mã hóa khác nhau, tùy thuộc vào vị trí của chúng trong 3 octet để tạo ra 4 ký tự

Và một hình ảnh sau khi được base64 sẽ kiểu như vậy

TWFuIGlzIGRpc3Rpbmd1aXNoZWQsIG5vdCBvbmx5IGJ5IGhpcyByZWFzb24sIGJ1dCBieSB0aGlz IHNpbmd1bGFyIHBhc3Npb24gZnJvbSBvdGhlciBhbmltYWxzLCB3aGljaCBpcyBhIGx1c3Qgb2Yg dGhlIG1pbmQsIHRoYXQgYnkgYSBwZXJzZXZlcmFuY2Ugb2YgZGVsaWdodCBpbiB0aGUgY29udGlu dWVkIGFuZCBpbmRlZmF0aWdhYmxlIGdlbmVyYXRpb24gb2Yga25vd2xlZGdlLCBleGNlZWRzIHRo ZSBzaG9ydCB2ZWhlbWVuY2Ugb2YgYW55IGNhcm5hbCBwbGVhc3VyZS4=

Các bạn thấy quen chứ ?

Hướng dẫn base64 encode python

Restart 3 octet ra 4 character

Bảng mã chuyển đổi base64 [a-zA-Z0-9+/]

Hướng dẫn base64 encode python

Cùng xem ví dụ sau để hiểu rõ hơn về cách chuyển đổi của base64 nhé. Giả sử chúng ta có chuỗi là. rav

Binary match of string on is. 01110010 01100001 01110110

Bước đầu tiên là chúng ta chia 3 octet trên thành nhóm 6 hơi

Nhị phân 011100 100110 000101 110110

Từ đó các số phân tích tương ứng với 4 nhóm mới sẽ là. 28 38 5 54

Bảng từ trên chúng ta sẽ có chuỗi ký tự sau khi mã hóa tương ứng như sau

28 = c

38 = m

5 = F

54 = 2

Vì thế rav sau khi qua base64 sẽ thành cmF2

Nhưng có điều gì sẽ xảy ra nếu byte số không chia hết cho 3, ví dụ 4 byte thì chúng ta sẽ có tất cả 4x8=32 bit. Sau khi chia làm từng nhóm 6 bit chúng ta sẽ được 5 nhóm và còn thiếu 4 bit để đủ 1 nhóm

Ví dụ với chuỗi. ca ngợi

Nhị phân - 01110010 01100001 01110110 01100101

3 byte đầu tiên của chúng tôi mã hóa giống nhau. Nhưng 8 bit cuối cùng không phân chia hết. Vì vậy, để mã hóa trong base64 chúng ta thực sự cần 12 bit. Các bit còn lại được đệm bằng số không. Cái kết như sau

Nhị phân 01110010 01100001 01110110 01100101 011001 010000

Số thập phân 25 16

Căn cứ64 Z Q

Nhưng dù thêm hay bớt, có vay có trả chúng ta vẫn thiếu 2 ký tự, cho nên kết thúc chuỗi mã hóa chúng ta phải có ký tự đệm cho nó. in MIME RFC character buffer is =

Kết quả sau khi mã hóa base64 chúng ta được. cmF2ZQ==

Cuối cùng chúng ta có thể thấy cứ 3 byte lại bị mã hóa thành 4 ký tự cho nên việc gửi thư hoặc gửi ảnh bị giới hạn dung lượng cũng vì lẽ đó, hoặc chúng ta không nên lưu trực tiếp base64 vào cơ sở dữ liệu cho dù điều

3. Kết luận

Trên đây là một số tìm hiểu của mình về base64 và còn khá nhiều kiến ​​thức xoay quanh nó mà mình chưa ngâm cứu hết được. Hy vọng thông qua bài viết này các bạn đã phần nào hiểu được thứ mà vẫn chung chăn gối với mình hen lâu nay. Mọi kiến ​​thức đều là đi nhìn thoáng, chỗ nào đi nhìn chưa sạch thì cũng mong các bạn thông cảm. Cảm ơn các bạn đã đón đọc