Tôi đang viết bằng C sử dụng thư viện OpenSSL.Cách tính giá trị băm MD5 của một tệp lớn trong C?
Tôi làm cách nào để tính giá trị băm của tệp lớn bằng md5?
Như tôi biết, tôi cần tải toàn bộ tệp vào RAM dưới dạng mảng char và sau đó gọi hàm băm. Nhưng nếu tập tin dài khoảng 4Gb thì sao? Âm thanh như một ý tưởng tồi.
SOLVED: Cảm ơn askovpen, tôi đã tìm thấy lỗi của mình. Tôi đã sử dụng
while ((bytes = fread (data, 1, 1024, inFile)) != 0)
MD5_Update (&mdContext, data, 1024);
không
while ((bytes = fread (data, 1, 1024, inFile)) != 0)
MD5_Update (&mdContext, data, bytes);
Tôi tò mò muốn biết cần thiết cho nó? Nó chắc chắn có thể là một ý tưởng tồi nếu nó không phải là luồng an toàn, vì nó có thể chặn chương trình trong một thời gian dài và P.O. người dùng – crockpotveggies
Mã hóa một tệp không giống như băm tệp bằng hàm băm như MD5. Bạn có thực sự có nghĩa là băm, hoặc bạn muốn mã hóa các tập tin? – Oleksi
MD5 dựa trên luồng. Bạn không cần phải tải toàn bộ 4GB vào bộ nhớ cùng một lúc - bạn đọc nó theo khối. –