
Kiểm tra SHA-256: hash khớp chưa chứng minh tệp đúng nguồn

Trên Windows, mở PowerShell, dùng Get-FileHash để tính SHA-256 của tệp vừa tải, rồi đối chiếu kết quả với mã dành cho đúng tệp do nhà phát hành công bố. Tài liệu Get-FileHash của Microsoft cho biết lệnh dùng SHA-256 theo mặc định và trả về mã băm của nội dung tệp.
Nếu hai mã khớp, nội dung tệp trên máy khớp với giá trị tham chiếu bạn đã nhập. Trước khi mở hoặc cài đặt, bạn vẫn cần xác định nơi công bố giá trị ấy có thực sự là kênh của nhà phát hành: người đưa ra một tệp khác cũng có thể tính và đăng mã băm khớp với chính tệp đó.
Tính mã băm của đúng tệp đã tải
Xác định đường dẫn của tệp trong thư mục tải xuống và chạy lệnh sau trong PowerShell. Đường dẫn chỉ là ví dụ; thay tên người dùng và tên tệp bằng thông tin trên máy của bạn.
Get-FileHash -LiteralPath 'C:\Users\TenBan\Downloads\ten-tep.exe' -Algorithm SHA256
Kết quả hiển thị thuật toán, giá trị Hash và đường dẫn tệp. Kiểm tra đường dẫn trước khi sao chép mã: hai tệp cùng tên ở hai thư mục khác nhau vẫn là hai đối tượng kiểm tra riêng. Tham số -LiteralPath dùng đường dẫn đúng như bạn nhập, nên các ký tự đặc biệt trong tên tệp không bị diễn giải thành ký tự đại diện.
Nếu chỉ cần chuỗi để đối chiếu thủ công, thêm .Hash vào cuối biểu thức. Một thông báo không tìm thấy hoặc không đọc được tệp là lỗi cần xử lý trước; nó không cung cấp kết quả về tính toàn vẹn.
(Get-FileHash -LiteralPath 'C:\Users\TenBan\Downloads\ten-tep.exe' -Algorithm SHA256).Hash
Đối chiếu với mã dành cho đúng bản phát hành
Lấy mã SHA-256 từ kênh phát hành mà bạn đã xác định là của dự án, rồi ghép nó với đúng tên tệp và phiên bản đã tải. Một trang có thể liệt kê riêng mã cho bản cài Windows, gói dành cho hệ điều hành khác và kho lưu trữ mã nguồn. Nếu mã được trình bày cùng tên tệp trên một dòng, chỉ sao chép phần mã băm vào biến tham chiếu.
Các dòng dưới đây cho PowerShell tự so sánh. Thay đường dẫn và chuỗi giữ chỗ bằng dữ liệu thật; chuỗi giữ chỗ cố ý không phải mã hợp lệ. Nhập lần lượt hai dòng gán biến trước, sau đó chạy toàn bộ dòng điều kiện cuối.
$file = 'C:\Users\TenBan\Downloads\ten-tep.exe'
$expected = 'DAN_MA_SHA256_CUA_NHA_PHAT_HANH_VAO_DAY'.Trim()
if ($expected -notmatch '^[0-9A-Fa-f]{64}$') { 'MÃ THAM CHIẾU SAI ĐỊNH DẠNG' } else { try { $actual = (Get-FileHash -LiteralPath $file -Algorithm SHA256 -ErrorAction Stop).Hash; if ($actual -ieq $expected) { 'KHỚP' } else { 'KHÔNG KHỚP' } } catch { 'KHÔNG ĐỌC ĐƯỢC TỆP' } }
Phép kiểm tra bỏ khoảng trắng ở hai đầu mã tham chiếu, yêu cầu chuỗi gồm 64 ký tự hệ thập lục phân và so sánh không phân biệt chữ hoa, chữ thường. Nó không tự tìm đúng mã trong một danh sách và cũng không xác thực trang bạn lấy mã. Tùy chọn -ErrorAction Stop cùng nhánh xử lý lỗi giữ cho việc không đọc được tệp không bị báo thành «KHÔNG KHỚP».
Đọc kết quả trước khi mở tệp
Mỗi thông báo trả lời một câu hỏi khác nhau về dữ liệu vừa nhập. Vì thế, hãy xử lý theo đúng loại kết quả:
- KHỚP: mã tính từ tệp bằng mã tham chiếu đã nhập. Kết quả chỉ hữu ích cho quyết định cài đặt khi bạn đã chọn đúng mã từ kênh phát hành đáng tin cậy.
- KHÔNG KHỚP: chưa mở hoặc cài đặt tệp. Kiểm tra lại tên tệp, phiên bản và chuỗi đã sao chép. Nếu chúng đúng mà mã vẫn khác, tải lại từ kênh phát hành đã xác định và tính lại.
- MÃ THAM CHIẾU SAI ĐỊNH DẠNG: giá trị nhập chưa phải một mã SHA-256 đơn lẻ. Kiểm tra xem bạn có sao chép kèm tên tệp, dấu phân cách hoặc một phần dòng khác hay không.
- KHÔNG ĐỌC ĐƯỢC TỆP: kiểm tra đường dẫn và quyền truy cập. Chưa có mã băm của tệp để so sánh.
Tên tệp không tham gia phép tính mã băm: đổi tên không làm đổi nội dung, còn nội dung có thể đổi mà tên vẫn giữ nguyên. Do đó, tên giống bản cài chính thức chỉ giúp bạn tìm đúng dòng tham chiếu; chính giá trị Hash mới cho biết nội dung tệp có khớp với dòng ấy hay không.
Giới hạn của một mã tham chiếu công bố trên web
Phép so sánh kiểm tra mối quan hệ giữa tệp cục bộ và mã được cung cấp. Nó không tự xác nhận ai đã công bố mã. Trong một tình huống giả định, trang tải xuống giả đăng một tệp đã bị thay đổi kèm mã SHA-256 tính từ tệp đó; người tải vẫn sẽ nhận kết quả «KHỚP» khi đối chiếu hai thứ trên cùng trang.
Vì vậy, hãy xác định địa chỉ phát hành từ kênh bạn đã biết trước, thay vì coi đường dẫn đi kèm tệp tải xuống là bằng chứng về nguồn. Đồng thời, đối chiếu đúng tài sản được liệt kê: mã của bộ cài không dùng để kiểm tra gói mã nguồn, dù hai tệp mang cùng số phiên bản. Khi loại tệp hoặc phiên bản khác nhau, kết quả không khớp trước hết đòi hỏi xác định lại cặp tệp và mã cần so sánh.
Khi có thể xác minh release hoặc nguồn gốc bản dựng
Nếu dự án phát hành tài sản qua một release bất biến trên GitHub, GitHub CLI cho phép kiểm tra thêm release và tệp cục bộ. Hướng dẫn xác minh release của GitHub đưa ra lệnh gh release verify RELEASE-TAG để kiểm tra release tồn tại và bất biến, cùng gh release verify-asset RELEASE-TAG ARTIFACT-PATH để kiểm tra tệp cục bộ khớp chính xác với tài sản của release đó.
Để dùng các lệnh ấy, cần cài GitHub CLI và chạy trong kho mã chứa release. Thay RELEASE-TAG bằng thẻ phát hành, ARTIFACT-PATH bằng đường dẫn tệp đã tải. Đây là lựa chọn khi dự án thực sự cung cấp release bất biến và tệp cần kiểm tra là tài sản của release; lệnh xác minh tài sản không áp dụng cho tệp ZIP hoặc tarball mã nguồn mà GitHub tạo khi có yêu cầu tải xuống.
Nếu nhà phát hành còn tạo attestation cho tệp nhị phân, bạn có thể kiểm tra thông tin về nơi và cách bản dựng được tạo. Hướng dẫn attestation của GitHub nêu lệnh gh attestation verify PATH/TO/YOUR/BUILD/ARTIFACT-BINARY -R ORGANIZATION_NAME/REPOSITORY_NAME để xác minh attestation của tệp nhị phân. Thay đường dẫn và tên kho mã bằng thông tin của dự án mà bạn định tin cậy.
Việc xác minh này bổ sung một mối liên hệ với kho mã và quy trình tạo bản dựng, nên đáng dùng khi nhà phát hành hỗ trợ. Kết quả chỉ có ý nghĩa với kho mã mà bạn đã xác định là của dự án; nếu chọn nhầm kho ngay từ đầu, thêm một lệnh xác minh sẽ không giải quyết được sai lệch đó.
Đọc thêm:
Bài viết liên quan


GitHub sắp siết SSH: khóa RSA cũ chưa chắc phải tạo lại

Kiểm tra gói npm trước khi cài: npm audit chưa kiểm tra được mọi thứ

Nhãn Verified trên GitHub vẫn còn sau khi khóa ký bị thu hồi

Sao lưu model Hugging Face: đừng chỉ tải bản mới nhất trên nhánh main

Sandbox GitHub Copilot chặn file nhạy cảm, nhưng mạng vẫn mở mặc định
Đăng ký bản tin
Nhận tin Web3, AI và tiền mã hóa mới nhất ngay trong hộp thư.