2012-03-11 43 views

Trả lời

16

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.

+0

trả lời câu hỏi của tôi. cảm ơn bạn! – tuna

+0

@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

+0

@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

4

Ví dụ, các mẫu byte, hex, và base64 dưới mã hóa các byte cùng:

  • byte: 243 48 133 140 73 157 28 136 11 29 189 101 194 101 116 64 172 227 220 78
  • hex : f330858c499d1c880b1dbd65c2657440ace3dc4e
  • base64: 8zCFjEmdHIgLHb1lwmV0QKzj3E4=.

Chỉ AWS yêu cầu các giá trị của nó được mã hóa base64.

+0

Ok, nhưng có lợi ích gì khi sử dụng base64 thay vì hex? Tôi có nghĩa là tại sao Amazon sử dụng base64 và không hex? – tuna

+1

base64 mã hóa các giá trị giống nhau trong ít ký tự ASCII hơn.Và bởi vì họ cũng sử dụng chữ ký khóa công khai thường được mã hóa với base64 trong các yêu cầu của họ, họ có thể nghĩ rằng việc sử dụng một mã hóa cho tất cả các giá trị có ý nghĩa. –

Các vấn đề liên quan