Trình tạo Hash
Tạo digest MD5, SHA-1, SHA-256, SHA-384 và SHA-512 từ bất kỳ văn bản nào. Mọi xử lý đều chạy cục bộ trong trình duyệt nên dữ liệu nhập không bao giờ được tải lên.
Văn bản đầu vào
0 ký tự
Hash
Nhập văn bản ở trên để xem hash.
Cách sử dụng Trình tạo Hash
- 1
Nhập văn bản của bạn
Gõ hoặc dán bất kỳ văn bản nào vào ô nhập liệu; các hàm băm được tính tự động từ các byte UTF-8 của nó.
- 2
Đọc mọi giá trị băm
Xem cùng lúc các kết quả MD5, SHA-1, SHA-256, SHA-384 và SHA-512, mỗi giá trị cập nhật trực tiếp khi bạn gõ.
- 3
Chọn thuật toán phù hợp
Chọn SHA-256 hoặc mạnh hơn cho mọi việc liên quan đến bảo mật, và chỉ dành MD5 hay SHA-1 cho các checksum không liên quan bảo mật và tương thích với hệ thống cũ.
- 4
Sao chép một giá trị băm
Nhấn Copy trên bất kỳ hàng nào để đưa giá trị băm dạng thập lục phân đó vào bộ nhớ tạm, tất cả mà không cần rời khỏi trình duyệt.
Giải thích về hàm băm: digest, tính toàn vẹn và những điều không nên làm
Hàm băm làm gì
Một hàm băm mật mã nhận dữ liệu đầu vào có độ dài bất kỳ và tạo ra một chuỗi byte có độ dài cố định gọi là digest, thường được hiển thị ở dạng thập lục phân. SHA-256 luôn phát ra 256 bit — 64 ký tự hex — bất kể bạn đưa vào một chữ cái đơn lẻ hay một tệp dung lượng cả gigabyte. Hàm này được thiết kế một chiều: tính digest từ dữ liệu đầu vào thì nhanh, nhưng khôi phục dữ liệu đầu vào từ digest thì bất khả thi về mặt tính toán. Chính sự bất đối xứng đó mới là điểm cốt lõi.
Trình tạo này tính năm digest từ cùng một văn bản cùng lúc — MD5, SHA-1, SHA-256, SHA-384 và SHA-512 — bằng Web Crypto API ở những nơi có sẵn. Việc thấy chúng cạnh nhau làm cho các đánh đổi trở nên cụ thể: các hàm cũ thì ngắn hơn và nhanh hơn, còn họ SHA-2 thì dài hơn và được dựng nên cho công việc bảo mật.
Tính tất định và hiệu ứng thác đổ
Các giá trị băm hoàn toàn mang tính tất định. Cùng một dữ liệu đầu vào luôn cho ra cùng một digest, mọi lúc, trên mọi máy và trong mọi cách hiện thực đúng đắn — và đó chính xác là điều khiến chúng hữu ích cho việc so sánh và xác minh. Gõ từ hello bạn nhận được một chuỗi SHA-256 cụ thể; gõ lại nó vào ngày mai và bạn nhận được đúng chuỗi y hệt.
Tuy vậy, ánh xạ này lại nhạy cảm một cách dữ dội với dữ liệu đầu vào. Đổi một ký tự duy nhất — kể cả lật chữ hoa-thường của một chữ cái hay thêm một khoảng trắng ở cuối — và một hàm băm tốt sẽ tạo ra một digest hoàn toàn khác, không thể nhận ra, với khoảng một nửa số bit đầu ra bị lật. Đây là hiệu ứng thác đổ (avalanche effect), và đó là lý do các digest vô dụng cho việc đoán xem hai dữ liệu đầu vào giống nhau đến mức nào: những đầu vào gần như giống hệt lại trông hoàn toàn chẳng liên quan, và đó là một tính năng, không phải lỗi.
Công dụng thường ngày: toàn vẹn và checksum
Công dụng hợp lệ phổ biến nhất của một giá trị băm là xác minh rằng dữ liệu đã đến nơi nguyên vẹn. Một trang tải xuống công bố mã SHA-256 của một tệp; sau khi tải về, bạn băm bản sao của mình và so sánh. Nếu hai digest khớp nhau từng ký tự một, thì tệp giống hệt bản gốc đến từng byte và không bị cắt cụt hay hỏng hóc trong quá trình truyền. Nếu chỉ một bit khác đi, các digest sẽ không khớp.
Cùng tính chất đó tiếp sức cho việc khử trùng lặp và phát hiện thay đổi. Các hệ thống lưu trữ băm các khối dữ liệu để phát hiện bản trùng mà không cần so sánh từng byte, các hệ thống quản lý phiên bản và bộ nhớ đệm dùng mã băm nội dung làm định danh, còn các công cụ build băm dữ liệu đầu vào để quyết định có thể bỏ qua công việc nào. Trong tất cả những trường hợp này, giá trị băm là một dấu vân tay nội dung gọn gàng và đáng tin cậy.
Băm không phải là mã hóa
Sự nhầm lẫn này có ở khắp nơi và nó rất quan trọng. Mã hóa thì đảo ngược được: với đúng khóa, bạn có thể khôi phục bản rõ ban đầu, vì toàn bộ mục đích là bảo vệ dữ liệu mà bạn định đọc lại về sau. Băm thì một chiều một cách có chủ đích — không có khóa và không có bước giải mã, vì mục tiêu là một dấu vân tay, chứ không phải một bản sao có thể khôi phục.
Vì vậy một giá trị băm không bao giờ là lời giải cho việc làm cho đoạn văn bản này bí mật nhưng vẫn đọc lại được sau này. Nếu bạn cần lưu trữ thứ gì đó và lấy lại được nó, bạn cần mã hóa. Nếu bạn chỉ cần kiểm tra xem một dữ liệu đầu vào về sau có khớp với một dữ liệu trước đó hay không mà không cần lưu bản gốc, bạn cần một giá trị băm. Chọn nhầm cái này thành cái kia là một lỗi thiết kế mà không sức mạnh thuật toán nào sửa được.
MD5 và SHA-1 đã hỏng về mặt bảo mật
MD5 và SHA-1 vẫn được tính ở đây vì chúng còn hữu ích cho các checksum không liên quan bảo mật, cho khả năng tương tác với hệ thống cũ và cho việc khớp các giá trị do các hệ thống cũ tạo ra. Nhưng cả hai đều đã hỏng về mặt mật mã: các nhà nghiên cứu đã tạo ra được va chạm trong thực tế, tức là hai dữ liệu đầu vào khác nhau lại băm ra cùng một digest, và với SHA-1 điều này đã được chứng minh bằng những tệp thật, có ý nghĩa. Một va chạm phá hủy đảm bảo bảo mật rằng một digest định danh duy nhất cho dữ liệu đầu vào của nó.
Quy tắc thực tế thì đơn giản. Không bao giờ dùng MD5 hay SHA-1 ở nơi mà kẻ tấn công có thể hưởng lợi từ việc giả mạo một lần khớp — chữ ký số, dấu vân tay chứng chỉ, nhật ký chống giả mạo, hay các định danh chống va chạm. Với bất cứ thứ gì nhạy cảm về bảo mật, hãy chọn SHA-256 hoặc mạnh hơn. Hãy để dành các hàm cũ cho những lần kiểm tra toàn vẹn thông thường nơi không có kẻ địch nào trong bức tranh.
Vì sao băm trơn là sai lầm đối với mật khẩu
Người ta thường muốn lưu một mật khẩu bằng cách lưu giá trị SHA-256 của nó rồi so sánh khi đăng nhập, nhưng đây là một sai lầm nghiêm trọng. Các hàm băm đa dụng được dựng nên để chạy nhanh, và chính tốc độ đó cho phép kẻ tấn công thử hàng tỷ mật khẩu ứng viên mỗi giây trước một cơ sở dữ liệu bị đánh cắp. Tệ hơn, hai người dùng có cùng mật khẩu sẽ tạo ra cùng một digest, và các bảng tra cứu được tính sẵn (rainbow table) có thể đảo ngược các mật khẩu phổ biến ngay tức khắc.
Lưu trữ mật khẩu đúng cách dùng một hàm dẫn xuất khóa được dựng riêng cho mục đích này, vừa chậm vừa có muối (salt) — bcrypt, scrypt hoặc Argon2 — trong đó một muối ngẫu nhiên duy nhất cho mỗi người dùng đánh bại các bảng tra cứu, còn một hệ số chi phí cố ý làm cho việc vét cạn trở nên đắt đỏ. Muối đơn giản là dữ liệu ngẫu nhiên được kết hợp với mật khẩu trước khi băm để các mật khẩu giống hệt nhau cho ra các giá trị lưu trữ khác nhau. Hãy dùng công cụ này để hiểu và xác minh các giá trị băm, nhưng đừng dùng một digest SHA trơn để lưu thông tin đăng nhập.
Mã hóa ký tự, định dạng đầu ra và quyền riêng tư
Vì một giá trị băm thao tác trên các byte, cách mã hóa văn bản phải được cố định, nếu không digest sẽ vô nghĩa khi đem so giữa các công cụ. Trình tạo này mã hóa dữ liệu đầu vào của bạn thành UTF-8 trước khi băm, nên chữ có dấu, các hệ chữ không phải Latinh và emoji đều tạo ra các digest tiêu chuẩn khớp với các cách hiện thực khác dựa trên UTF-8. Nếu một digest bạn tính ở nơi khác lại không khớp, nguyên nhân thông thường là sai lệch mã hóa — hoặc một ký tự xuống dòng lạc ở cuối.
Mọi thứ chạy cục bộ trong trình duyệt của bạn; dữ liệu đầu vào không bao giờ được tải lên, ghi nhật ký hay lưu trữ, điều này khiến nó an toàn để băm token, nội dung tệp hay những giá trị nhạy cảm khác. Một thói quen xác minh tiện lợi là dán một dữ liệu đầu vào đã biết và xác nhận digest khớp với giá trị mà ứng dụng của bạn hoặc một trang tải xuống báo cáo — khi chúng trùng nhau từng byte một, cả hai phía đang mã hóa và băm cùng một thứ.
Câu hỏi thường gặp
Công cụ này tạo ra những thuật toán băm nào?
Dữ liệu đầu vào của tôi có được gửi đến máy chủ không?
Tôi nên dùng MD5 hay SHA-256?
Có thể đảo ngược một giá trị băm về văn bản gốc không?
Công cụ có xử lý đúng Unicode và emoji không?
Công cụ liên quan
Tiếp tục với những công cụ hữu ích này