背景:
在某些情景下,需要对上传的文件进行校验,是否是安全的、完整的。比如,实现在web端上传war包,更新web后台。那么,在这一过程中,需要确保要上传的war包是正确的,而非被别有用心的人替换过的;也要确保war包,在上传过程中没有发生缺包状况,保证war包的完整性。
原理
MD5值是一串hash值,文件只要有任何字节变动,MD5值就会跟着改变,因此可以作为校验文件的依据。
- 在前端输入MD5值,选中要上传的war包。
- 在前端判断war包的MD5值,与输入的MD5值是否相同,判断是否被替换。
- 在后台进行校验接收的war包的MD5值,与输入的MD5值是否相同,判断是否存在丢包情况。
实现
前端
前端校验MD5值,可以引入spark.js。详细流程可以查看这篇博文,–>javascript 计算文件MD5 浏览器 javascript读取文件内容,<–
后台
// 获取文件MD5值
File file = new File(filePath);
fis = new FileInputStream(file);
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] buffer2 = new byte[1024];
int length2 = -1;
while ((length2 = fis.read(buffer2, 0, 1024)) != -1) {
md.update(buffer2, 0, length2);
}
BigInteger bigInt = new BigInteger(1, md.digest());
String md5val = bigInt.toString(16);
if (!StringUtils.equalsIgnoreCase(filemd5, md5val)) {
// MD5值不一致
errormsg = "md5_error";
}