java获取文件的消息摘要APP进行文件完整性校验
后端Java获取方式
Java后端获取文件的消息摘要方法,可以设置获取MD5 SHA1 SHA256 SHA512:
/*** 获取文件的消息摘要* @param file 待做摘要处理的文件* @param type 获取消息摘要使用的MD算法:MD5 SHA1 SHA256 SHA512* return String 消息摘要 * @throws Exception*/public static String getFileMD(File file,String type) {if (!file.isFile()) {return null;}MessageDigest digest = null;FileInputStream in = null;byte buffer[] = new byte[1024 * 100];int len;try {digest = MessageDigest.getInstance(type);in = new FileInputStream(file);while ((len = in.read(buffer, 0, 1024)) != -1) {digest.update(buffer, 0, len);}in.close();} catch (Exception e) {e.printStackTrace();return null;}BigInteger bigInt = new BigInteger(1, digest.digest());return bigInt.toString(16);}
导入的包:
import java.io.File;
import java.io.FileInputStream;
import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.Security;
测试:
public static void main(String[] args) throws Exception {File file=new File("/Users/mac/Public/V0.0.1_release.apk");String md5=getFileMD(file,"MD5");System.out.println("md5:" + md5);String sha1=getFileMD(file,"SHA1");System.out.println("sha1:" + sha1);String sha256=getFileMD(file,"SHA256");System.out.println("sha256:" + sha256);String sha512=getFileMD(file,"SHA512");System.out.println("sha512:" + sha512);}
运行显示:
md5:rt58455f95e63489871cf370e0f33w12
sha1:30c35b1f8ef659333795bc0b5a916b23384857ku
sha256:wetfdbb04165437cc437c0765c34bc2dbb8a899ef92dab82de15f1ffb180a409
sha512:389c96635677751ef2e8ae990ae1695504bcc2c5t2b99d0d898e7e6c37eb1ab2d8a12f24f9d6705b63f11ec8d30fctt7eb1d06b76704f00c4b1b94578f152h4k
APP端Flutter获取方式
配置依赖库:
crypto: 3.0.3
import 'dart:io';
import 'package:crypto/crypto.dart';///消息摘要获取工具类
///数字指纹、哈希值获取
class CryptoUtil {factory CryptoUtil() => _getInstance()!;static CryptoUtil? get instance => _getInstance();static CryptoUtil? _instance;static CryptoUtil? _getInstance() {_instance ??= CryptoUtil._internal();return _instance;}CryptoUtil._internal() {_instance = this;}Future<String> fileHash({String? filePath, String type = 'md5'}) async {File file = File(filePath!);final stream = file.openRead();Digest digest;if (type == 'md5') {digest = await md5.bind(stream).first;} else if (type == 'sha1') {digest = await sha1.bind(stream).first;} else if (type == 'sha256') {digest = await sha256.bind(stream).first;} else if (type == 'sha512') {digest = await sha512.bind(stream).first;} else {digest = await md5.bind(stream).first;}String hash = digest.toString();return hash;}
}