Trên một lưu ý liên quan, đây là một công cụ chuyển đổi cơ sở để chuyển đổi cơ sở tùy ý mà tôi đã tạo cho bạn. Thưởng thức!
https://convert.zamicol.com/
Ký tự đệm là gì?
Các ký tự đệm giúp đáp ứng các yêu cầu về độ dài và không mang ý nghĩa.
Ví dụ thập phân về phần đệm:
Với yêu cầu tùy ý tất cả các chuỗi đều có độ dài 8 ký tự, số 640 có thể đáp ứng yêu cầu này bằng cách sử dụng các ký tự đệm đứng trước số 0 vì chúng không có nghĩa, "00000640".
Mã hóa nhị phân
Mô hình Byte: Byte là đơn vị đo lường tiêu chuẩn trên thực tế và bất kỳ lược đồ mã hóa nào cũng phải liên quan trở lại đến byte.
Base256 phù hợp chính xác với mô hình này. Một byte tương đương với một ký tự trong base256.
Base16 , hệ thập lục phân hoặc hệ thập lục phân, sử dụng 4 bit cho mỗi ký tự. Một byte có thể đại diện cho hai ký tự base16.
Base64 không phù hợp đồng đều với mô hình byte (cũng như base32), không giống như base256 và base16. Tất cả các ký tự base64 có thể được biểu diễn bằng 6 bit, ngắn 2 bit của một byte đầy đủ.
Chúng ta có thể biểu diễn mã hóa base64 so với mô hình byte dưới dạng một phân số: 6 bit trên mỗi ký tự trên 8 bit trên mỗi byte . Giảm phân số này là 3 byte trên 4 ký tự.
Tỷ lệ này, 3 byte cho mỗi 4 ký tự base64, là quy tắc chúng tôi muốn tuân theo khi mã hóa base64. Mã hóa Base64 chỉ có thể hứa hẹn thậm chí đo với gói 3 byte, không giống như base16 và base256, nơi mỗi byte có thể tự đứng.
Vậy tại sao phần đệm lại được khuyến khích mặc dù việc mã hóa có thể hoạt động tốt mà không có ký tự đệm?
Nếu độ dài của một luồng không xác định hoặc nếu biết chính xác thời điểm luồng dữ liệu kết thúc, hãy sử dụng phần đệm. Các ký tự đệm thông báo rõ ràng rằng những điểm bổ sung đó phải trống và loại trừ mọi sự mơ hồ. Ngay cả khi độ dài không xác định với phần đệm, bạn sẽ biết nơi kết thúc luồng dữ liệu của mình.
Ví dụ về bộ đếm, một số tiêu chuẩn như JOSE không cho phép các ký tự đệm. Trong trường hợp này, nếu thiếu thứ gì đó, chữ ký mật mã sẽ không hoạt động hoặc các ký tự không phải base64 khác sẽ bị thiếu (như "."). Mặc dù giả định về độ dài không được đưa ra, nhưng không cần đệm bởi vì nếu có gì đó sai, nó sẽ không hoạt động.
Và đây chính xác là những gì RFC base64 nói,
Trong một số trường hợp, việc sử dụng padding ("=") trong dữ liệu được mã hóa cơ sở là không bắt buộc hoặc không được sử dụng. Trong trường hợp chung, khi không thể thực hiện các giả định về kích thước của dữ liệu được vận chuyển, thì cần có phần đệm để mang lại dữ liệu được giải mã chính xác.
[...]
Bước đệm trong cơ sở 64 [...] nếu được triển khai không đúng cách, sẽ dẫn đến những thay đổi không đáng kể đối với dữ liệu được mã hóa. Ví dụ: nếu đầu vào chỉ là một octet cho mã hóa cơ sở 64, thì tất cả sáu bit của ký hiệu đầu tiên được sử dụng, nhưng chỉ hai bit đầu tiên của ký hiệu tiếp theo được sử dụng. Các bit đệm này PHẢI được đặt thành 0 bằng các bộ mã hóa phù hợp, được mô tả trong phần mô tả về đệm bên dưới. Nếu thuộc tính này không được giữ, sẽ không có biểu diễn chính tắc của dữ liệu được mã hóa cơ sở và nhiều chuỗi được mã hóa cơ sở có thể được giải mã thành cùng một dữ liệu nhị phân. Nếu thuộc tính này (và các thuộc tính khác được thảo luận trong tài liệu này) giữ nguyên, thì mã hóa chuẩn được đảm bảo.
Padding cho phép chúng tôi giải mã mã hóa base64 với lời hứa không có bit bị mất. Không có phần đệm thì không còn xác nhận rõ ràng về việc đo lường trong gói ba byte. Nếu không có phần đệm, bạn có thể không đảm bảo sao chép chính xác mã hóa gốc mà không có thông tin bổ sung thường từ một nơi khác trong ngăn xếp của bạn, như TCP, tổng kiểm tra hoặc các phương pháp khác.
Ví dụ
Đây là mẫu ví dụ RFC 4648 ( http://tools.ietf.org/html/rfc4648#section-8 )
Mỗi ký tự bên trong hàm "BASE64" sử dụng một byte (base256). Sau đó, chúng tôi dịch nó sang base64.
BASE64("") = "" (No bytes used. 0%3=0.)
BASE64("f") = "Zg==" (One byte used. 1%3=1.)
BASE64("fo") = "Zm8=" (Two bytes. 2%3=2.)
BASE64("foo") = "Zm9v" (Three bytes. 3%3=0.)
BASE64("foob") = "Zm9vYg==" (Four bytes. 4%3=1.)
BASE64("fooba") = "Zm9vYmE=" (Five bytes. 5%3=2.)
BASE64("foobar") = "Zm9vYmFy" (Six bytes. 6%3=0.)
Đây là một bộ mã hóa mà bạn có thể sử dụng: http://www.motobit.com/util/base64-decoder-encoder.asp