当前位置: 首页 > news >正文

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;}
}
http://www.dtcms.com/a/269609.html

相关文章:

  • JavaScript基础篇——第二章 类型转换与常见错误解析
  • 二分查找篇——搜索二维矩阵【LeetCode】遍历法
  • qt-C++笔记之setCentralWidget的使用
  • Visual Studio Code 中统一配置文件在团队协作中的应用
  • 论文略读:Prefix-Tuning: Optimizing Continuous Prompts for Generation
  • Git 安装避坑指南:从环境检查到高级配置的全流程解析
  • EXCEL转html,含图片
  • Linux下SPHinXsys源码编译安装及使用
  • Flutter基础(前端教程③-跳转)
  • Wend看源码-RAGFlow(上)
  • nvm npm nrm 使用教程
  • 台式电脑如何连wifi 快速连接方法
  • synchronized 的使用和特性
  • 算法学习笔记:11.冒泡排序——从原理到实战,涵盖 LeetCode 与考研 408 例题
  • VBA经典应用69例应用8:取消预设任务
  • (三)C#使用yolo
  • 在教育领域中,如何通过VRM分片错序对视频进行加密?
  • git学习:首次创建仓库
  • ubuntu 运行脚本打开WIFI adb
  • YOLO在自动驾驶交通标志识别中的应用与优化【附代码】
  • Qt:图片切割
  • 代码详细注释:演示如何使用dup()系统调用复制文件描述符
  • Linux操作系统:再谈虚拟地址空间
  • const char* 、char*和char[]的区别
  • MySQL数据库访问(C/C++)
  • 恒创科技:香港站群服务器做seo站群优化效果如何
  • 2025年数据挖掘与计算机科学国际会议 (DMCS 2025)
  • 基于Docker Compose部署Traccar容器与主机MySQL的完整指南
  • 专题:2025数据资产AI价值化:安全、战略与应用报告|附400+份报告PDF、原数据表汇总下载
  • uniapp 监听物理返回按钮