Những băm không ASCII-lý do mà bạn nhìn thấy chữ số hex là do phần mềm bạn sử dụng để tạo ra chúng có đầu ra nhị phân của tiêu hóa và biến nó thành một chuỗi ASCII của số thập lục phân.
Ví dụ, thông báo MD5 sẽ điền vào một mảng 16 byte. Bạn cũng có thể biểu diễn nó dưới dạng một chuỗi gồm 32 ký tự, nhưng hình thức tiêu hóa cơ bản nhất vẫn là mảng byte.
Khi bạn thay đổi một mảng byte thành chuỗi thập lục phân, bạn cần 8 bit (một ký tự đầy đủ) để biểu diễn mỗi 4 bit dữ liệu. Mặc dù nó không thường xuyên được gọi theo cách đó, bạn có thể nói rằng điều này sử dụng "base16" mã hóa, vì bạn đang lấy 4 bit tại một thời điểm và ánh xạ chúng vào một bảng chữ cái 16 ký tự.
Base64, mặt khác, lấy 6 bit tại một thời điểm và ánh xạ chúng vào bảng chữ cái 64 ký tự. Điều này có nghĩa rằng bạn cần 8 bit (một lần nữa, một ký tự đầy đủ) để biểu diễn mỗi 6 bit dữ liệu, trong đó có một nửa số bit bị lãng phí của base16. Chuỗi được mã hóa base16 sẽ luôn lớn gấp hai lần so với bản gốc; chuỗi được mã hóa base64 sẽ chỉ bằng bốn phần ba. Đối với một băm SHA256, base16 làm 64 byte, nhưng base64 làm xấp xỉ 43.
trả lời câu hỏi của tôi. cảm ơn bạn! – tuna
@zneak Là không gian hiệu quả lý do để sử dụng Base 64 mã hóa trên một hash.Không phải là nếu chúng ta cần phải gửi băm này, chúng tôi cần rằng băm được thể hiện như văn bản và Base64 làm điều đó bằng cách hạn chế dữ liệu nhị phân để một bộ trong số 64 phần lớn các ký tự chồng chéo từ hầu hết các mã hóa phổ biến? – crackerplace
@zneak Tôi có nghĩa là bằng cách cho băm một dạng có thể trình bày trên bất kỳ máy tính nào. – crackerplace