Công cụ dành cho nhà phát triển · Máy tính hàm băm SHA
Cách SubtleCrypto.digest Tính toán hàm băm SHA-256 trong trình duyệt
· Cách thức hoạt động
sha-256 mật mã browser-apis
Mọi trình duyệt hiện đại đều có thể băm byte thông qua Web Crypto. Bài đăng này tuân theo một chuỗi từ TextEncode đến crypto.subtle.digest đến một bản tóm tắt hex và giải thích các ràng buộc của từng bước.
Hàm băm không có cài đặt npm - tình huống trong đó bản tóm tắt gốc đánh bại thư viện đi kèm
Bạn có thể tính toán thông báo cho một giá trị văn bản ngắn mà không cần cài đặt gói băm hoặc đăng dữ liệu lên trang web băm từ xa. Trình duyệt hiển thị crypto.subtle.digest về nguồn gốc an toàn. Hàm băm là một dấu vân tay có độ dài cố định xác định của byte; nó không che giấu đầu vào hoặc chứng minh ai đã cung cấp nó. ToolAcre sử dụng triển khai trình duyệt thay vì gửi thuật toán SHA viết tay và giữ cho chuỗi được băm trong tab.
Văn bản không phải là byte — mã hóa đầu vào bằng TextEncode thành UTF-8 trước khi băm và lý do bước này quyết định câu trả lời
Văn bản “café” và các byte được đưa vào hàm băm không phải là cùng một loại đối tượng. TextEncoding ánh xạ chuỗi tới UTF-8 byte (63 61 66 C3 A9 cho quán cà phê), trong khi chuyển đổi Latin-1 ngây thơ sẽ sử dụng E9 cho ký tự cuối cùng và tạo ra một thông báo khác. Ngay cả văn bản giống hệt nhau về mặt hình ảnh cũng có thể có các dạng chuẩn hóa Unicode khác nhau. Đồng ý về việc mã hóa và chuẩn hóa trước khi so sánh các giá trị băm trên JavaScript, CLI và máy chủ. Chế độ văn bản của ToolAcre thực hiện chuyển đổi UTF-8 một cách rõ ràng trước khi băm.
Lệnh gọi thông báo — crypto.subtle.digest với tên thuật toán và ArrayBuffer cũng như lý do nó trả về một lời hứa
crypto.subtle.digest("SHA-256", bytes) trả về Lời hứa vì công việc mã hóa có thể không đồng bộ; chờ đợi nó trước khi đọc đầu ra. Phương thức này lấy toàn bộ vùng đệm đầu vào thay vì một trình lặp phát trực tuyến. SHA-256 phát ra 256 bits (32 bytes) bất kể dữ liệu đầu vào có ba ký tự hay ba triệu. Hạn chế về ngữ cảnh bảo mật có nghĩa là HTTPS hoặc localhost là bắt buộc đối với SubtleCrypto API và công cụ này sẽ báo cáo sự vắng mặt của nó thay vì tạo ra một phương án dự phòng.
Từ ArrayBuffer sang hex — biến byte kết quả thành chuỗi ký tự 64 mà mọi người nhận ra
Lời hứa phân giải thành một ArrayBuffer gồm các byte, không phải chuỗi chữ số hex quen thuộc. Chuyển đổi từng byte thành hai ký tự cơ sở16 với số 0 đứng đầu nếu cần, mang lại chính xác 64 ký tự chữ thường cho SHA-256. Biểu diễn dạng hex này tăng gấp đôi độ dài của 32 bytes nhưng không thay đổi thông báo. Base64 có thể biểu diễn 32 bytes tương tự một cách gọn gàng hơn; việc so sánh chỉ có ý nghĩa sau khi xác nhận thuật toán, mã hóa đầu vào và biểu diễn đầu ra khớp nhau.
Ví dụ hoạt động - băm từng chuỗi ngắn, hiển thị byte ở mỗi giai đoạn
Đối với văn bản ASCII abc, UTF-8 tạo ra các byte 61 62 63. SHA-256 trong số byte chính xác đó là ba7816bf8f01cfea414140de5dae2223b00361a396177a9cb410ff61f20015ad. Kiểm tra điều này trong ToolAcre và cách triển khai hàm băm đáng tin cậy khác: thay đổi abc thành abc theo sau là dòng mới sẽ cho kết quả khác. Nếu kết quả đầu ra khác nhau, hãy kiểm tra khoảng trắng ẩn và mã hóa byte trước khi nghi ngờ nguyên thủy mật mã. Thông báo tóm tắt được hiển thị là vectơ thử nghiệm có thể tái tạo, không khẳng định rằng abc là bí mật.
Bối cảnh an toàn — tại sao crypto.subtle chỉ khả dụng trên HTTPS và localhost
crypto.subtle là bối cảnh an toàn API. Trang HTTPS sản xuất và trang phát triển localhost thường hiển thị nó; một trang HTTP từ xa không an toàn thông thường có thể không. Công cụ này cũng cần có đủ bộ nhớ để chứa đầu vào và đầu ra. Khi Web Crypto không khả dụng, việc âm thầm chuyển sang hàm băm JavaScript chưa được xem xét sẽ khiến kết quả nhạy cảm về bảo mật phụ thuộc vào cách triển khai khác. Thất bại rõ ràng và thay vào đó hãy chọn một môi trường an toàn.
Nội dung này không bao gồm — hàm băm có khóa (HMAC) và hàm băm tăng dần của các đầu vào rất lớn mà bản tóm tắt một lần API không cung cấp
Thông báo một lần API không phải là hàm băm tăng dần cho các tệp lớn. SHA-256 không phải là một sơ đồ lưu trữ mật khẩu: hàm băm không có muối nhanh giúp cho việc đoán giá rẻ, do đó, việc lưu trữ mật khẩu cần một KDF được xây dựng có mục đích, có chủ đích và tốn kém một cách có chủ ý. SHA-1 có thể được hiển thị để đảm bảo khả năng tương tác cũ nhưng khả năng chống va chạm của nó bị hỏng và đây không phải là lựa chọn tốt cho các hệ thống chữ ký hoặc tính toàn vẹn mới. HMAC là xác thực có khóa, không hoạt động giống như việc xử lý các byte chưa được xác thực.
Bài học rút ra: trình duyệt đã có hàm băm — máy tính băm ToolAcre SHA sử dụng chính xác API này, vì vậy đầu ra của nó là của chính trình duyệt
Trình duyệt đã cung cấp SHA-256: mã hóa văn bản dưới dạng byte, chờ thông báo, sau đó định dạng kết quả để so sánh. Công cụ tính hàm băm ToolAcre SHA đi theo đường dẫn đó cho văn bản được dán và nhãn SHA-1 chỉ ở dạng cũ. Trước tiên hãy so sánh abc với kết quả đã biết, sau đó băm tài liệu thực tế không nhạy cảm có byte và mã hóa mà bạn hiểu.