Hai năm cuối, nhưng ở đây chúng tôi đi:
Câu trả lời ngắn gọn là có, giá trị nhị phân/hex độc đáo sẽ luôn mã hóa sang một base64 độc đáo mã hóa chuỗi.
NHƯNG, nhiều chuỗi mã hóa base64 có thể đại diện cho một giá trị nhị phân/hex đơn.
Điều này là do byte hex không được căn chỉnh với số 'base64'. Một byte hex đơn được biểu diễn bằng 8 bit trong khi một chữ số base64 đơn được biểu diễn bằng 6 bit. Do đó, bất kỳ giá trị hex nào không được liên kết 6 bit đều có thể có nhiều đại diện base64 (mặc dù bộ mã hóa base64 được triển khai chính xác nên mã hóa thành cùng một đại diện base64).
Ví dụ về sự lệch hướng này là giá trị hex '0x433356c1'. Giá trị này được biểu diễn bằng mã hóa 32 bit và base64 thành 'QzNWwQ =='. Tuy nhiên, giá trị 32 bit này không được căn chỉnh 6 bit. Vậy điều gì sẽ xảy ra? Các bộ mã hóa base64 đệm bốn bit không vào cuối biểu diễn nhị phân trong trường hợp này để tạo chuỗi 36 bit và do đó liên kết 6 bit.
Khi giải mã, bộ giải mã base64 hiện phải giải mã thành giá trị liên kết 8 bit. Nó cắt ngắn các bit đệm và giải mã 32 bit đầu tiên thành một giá trị hex. Ví dụ: 'QzNWwc ==' và 'QzNWwQ ==' là các chuỗi mã hóa base64 khác nhau, nhưng giải mã thành cùng một giá trị hex, 0x433356c1. Nếu chúng ta nhìn một cách cẩn thận, chúng tôi nhận thấy rằng 32 bit đầu tiên là như nhau cho cả hai chuỗi mã hóa:
'QzNWwc==':
010000 110011 001101 010110 110000 011100
'QzNWwQ==':
010000 110011 001101 010110 110000 010000
Sự khác biệt duy nhất là bốn bit cuối cùng, được bỏ qua. Xin lưu ý rằng không có bộ mã hóa base64 nên từng tạo 'QzNWwc ==' hoặc bất kỳ giá trị base64 nào khác cho 0x433356c1 ngoài 'QzNWwQ ==' vì byte đệm được thêm phải luôn là số 0.
Tóm lại, có thể giả định rằng giá trị nhị phân/hex duy nhất sẽ luôn mã hóa thành biểu diễn base64 duy nhất sử dụng bộ mã hóa base64 được triển khai chính xác. Một 'va chạm' sẽ chỉ xảy ra trong quá trình giải mã nếu chuỗi base64 được tạo ra mà không có byte đệm/sắp xếp zeroing.
Base64 là * không * mã hóa. Nhưng có, các chuỗi đầu vào khác nhau sẽ luôn mã hóa thành các chuỗi mã hóa Base64 khác nhau và chuỗi đầu vào giống nhau sẽ luôn mã hóa thành cùng chuỗi được mã hóa Base64. Nó không phải là một băm mặc dù, do đó, những thay đổi nhỏ trong đầu vào sẽ chỉ dẫn đến những thay đổi nhỏ trong đầu ra. – Blorgbeard