最近在写个基于Flask框架的上传文件功能,其中涉及到去到DB校验文件是否已经存在的功能要用到MD5码 顺手来和大家分享下
目录
使用命令行工具
Linux/macOS:
- 使用
md5
或md5sum
命令md5 文件路径 md5sum 文件路径
Windows:
- 使用
CertUtil
命令:CertUtil -hashfile 文件路径 MD5
使用编程语言
Python:
- 可以使用
hashlib
模块来计算 MD5:
import hashlib
def calculate_md5(file_path):
# 创建一个MD5哈希对象
md5_hash = hashlib.md5()
# 以二进制模式打开文件
with open(file_path, "rb") as f:
# 逐块读取文件并更新
for chunk in iter(lambda: f.read(4096), b""):
md5_hash.update(chunk)
# 返回16进制格式的哈希值
return md5_hash.hexdigest()
# 使用示例
file_path = 'your_file.txt' # 替换为你的文件路径
md5_value = calculate_md5(file_path)
print(f"文件的MD5值是: {md5_value}")
# 输出示例:文件的MD5值是: d41d8cd98f00b204e9800998ecf8427e
Java:
- 使用
java.security.MessageDigest
类:
import java.io.*;
import java.security.*;
public class MD5Checksum {
public static void main(String[] args) throws Exception {
FileInputStream fis = new FileInputStream("你的文件路径");
byte[] buffer = new byte[1024];
MessageDigest md5 = MessageDigest.getInstance("MD5");
int numRead;
do {
numRead = fis.read(buffer);
if (numRead > 0) {
md5.update(buffer, 0, numRead);
}
} while (numRead != -1);
fis.close();
byte[] digest = md5.digest();
StringBuffer sb = new StringBuffer();
for (byte b : digest) {
sb.append(String.format("%02x", b));
}
System.out.println("MD5: " + sb.toString());
}
}
这些方法可以较为容易地计算文件的MD5值,但要确保在计算MD5之前文件是完整的,这样计算出的哈希值才有意义