Android文件MD5/SHA1/SHA256校验
一般进行文件下载需求时,都会附带有文件完整性和正确性校验,避免下载的文件不完整或者被第三方劫持注入,貌似很多都是采用MD5校验,但也有采用sha1或者sha256校验,最近做的两个项目中刚好先后遇到了md5和sha256校验,跟了一下MessageDigest源码,提取出工具类供以后使用,同时在此贡献出来,如有不正确的地方欢迎指正。
1、采用枚举定义需要校验的类型,屏蔽直接传入不支持的校验方式,增加容错率:
public enum TypeEnum {MD5, SHA1, SHA256}
2、获取指定文件的md5/sha1/sha256
private static String getFileSignature(File file, TypeEnum typeEnum) {MessageDigest digest;String type = "";switch (typeEnum) {case MD5:type = "MD5";break;case SHA1:type = "SHA-1";break;case SHA256:type = "SHA-256";break;}if (TextUtils.isEmpty(type)) {LogUtil.e(Constants.LOG_TAG, "type undefined");return null;}try {digest = MessageDigest.getInstance(type);} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}InputStream is;try {is = new FileInputStream(file);} catch (FileNotFoundException e) {e.printStackTrace();LogUtil.e(TAG, "Exception while getting FileInputStream");return null;}byte[] buffer = new byte[8192];int read;try {while ((read = is.read(buffer)) > 0) {digest.update(buffer, 0, read);}byte[] md5sum = digest.digest();BigInteger bigInt = new BigInteger(1, md5sum);String output = bigInt.toString(16);output = String.format("%32s", output).replace(' ', '0');return output;} catch (IOException e) {e.printStackTrace();LogUtil.e(TAG,"Unable to process file for ");return null;} finally {try {is.close();} catch (IOException e) {e.printStackTrace();LogUtil.e(TAG, "Exception on closing inputstream:" );}}}
3、与服务器给的文件md5/sha1/sha256对比
public static boolean validateFile(TypeEnum typeEnum, String standardStr, File fileToCheck) {if (TextUtils.isEmpty(standardStr) || fileToCheck == null) {LogUtil.e(TAG, "MD5 string empty or updateFile null");return false;}String calculatedDigest = getFileSignature(fileToCheck, typeEnum);if (TextUtils.isEmpty(calculatedDigest)) {LogUtil.d(TAG, "calculatedDigest null");return false;}return calculatedDigest.equalsIgnoreCase(standardStr);}
全部代码如下:
public class FileValidateUtil {private static final String TAG = Constants.LOG_TAG;public enum TypeEnum {MD5, SHA1, SHA256}/*** @param typeEnum* @param standardStr* @param fileToCheck* @return*/public static boolean validateFile(TypeEnum typeEnum, String standardStr, File fileToCheck) {if (TextUtils.isEmpty(standardStr) || fileToCheck == null) {LogUtil.e(TAG, "MD5 string empty or updateFile null");return false;}String calculatedDigest = getFileSignature(fileToCheck, typeEnum);if (TextUtils.isEmpty(calculatedDigest)) {LogUtil.d(TAG, "calculatedDigest null");return false;}return calculatedDigest.equalsIgnoreCase(standardStr);}private static String getFileSignature(File file, TypeEnum typeEnum) {MessageDigest digest;String type = "";switch (typeEnum) {case MD5:type = "MD5";break;case SHA1:type = "SHA-1";break;case SHA256:type = "SHA-256";break;}if (TextUtils.isEmpty(type)) {LogUtil.e(Constants.LOG_TAG, "type undefined");return null;}try {digest = MessageDigest.getInstance(type);} catch (NoSuchAlgorithmException e) {e.printStackTrace();return null;}InputStream is;try {is = new FileInputStream(file);} catch (FileNotFoundException e) {e.printStackTrace();LogUtil.e(TAG, "Exception while getting FileInputStream");return null;}byte[] buffer = new byte[8192];int read;try {while ((read = is.read(buffer)) > 0) {digest.update(buffer, 0, read);}byte[] md5sum = digest.digest();BigInteger bigInt = new BigInteger(1, md5sum);String output = bigInt.toString(16);output = String.format("%32s", output).replace(' ', '0');return output;} catch (IOException e) {e.printStackTrace();LogUtil.e(TAG,"Unable to process file for ");return null;} finally {try {is.close();} catch (IOException e) {e.printStackTrace();LogUtil.e(TAG, "Exception on closing inputstream:" );}}}}
Android文件MD5/SHA1/SHA256校验相关推荐
- Windows系统中通过命令查看文件的MD5,SHA1,SHA256校验值
Windows系统中通过命令查看文件的MD5,SHA1,SHA256校验值 命令格式如下: certutil -hashfile yourfilename MD5 certutil -hashfile ...
- Windows cmd 查看文件MD5 SHA1 SHA256
Windows cmd 查看文件MD5 SHA1 SHA256 certutil -hashfile yourfilename.ext MD5certutil -hashfile yourfilena ...
- 在Windows系统中查看下载文件的MD5,SHA1,SHA256校验码
步骤一: 打开Windows终端 1. Windows按键+R 2. 输入CMD 3. 点击确定,打开终端 步骤二: 在Windows终端中输入校验命令 1. Windows终端命令结构 certut ...
- certutil 校验文件md5,sha1,sha256
certutil -hashfile yourfilename MD5 certutil -hashfile yourfilename SHA1 certutil -hashfile yourfile ...
- Java 读取文件 MD5 sha1 sha256 sha224 sha384 sha512
在Java中读取文件的MD5或SHA码,用于对文件完整性进行校验,示例代码较为简单,如下: 一.使用到的 jar (pom.xml) <dependency><groupId> ...
- 【windows 自带的certutil 完成 md5, sha1 sha256校验】
命令格式 certutil -hashfile xxx.zip md5 certutil -hashfile xxx.zip sha1 certutil -hashfile xxx.zip sha25 ...
- android sha1校验工具,【原创实用】文件校验工具V1.2.1:支持MD5 SHA1 SHA256
前言:这个程序其实我很早以前(大概上上周?)就已经完成了 但是没有发布,因为我还想不断打磨打磨. 先别走,结尾还有彩蛋 现如今相较第一个版本,已经进行如下改动: 解决clear之后后台线程依然未停止的 ...
- 快速计算文件的MD5/SHA1/SHA256等校验值(Windows/Linux)
从网络上下载文件,尤其是非常大的文件怎么确保文件准确无误呢? 通常网站提供文件时会同时提供该文件的校验值,如MD5,SHA1,SHA256等, 当文件下载完成后,计算它的校验值,如果和网站提供的一致, ...
- 使用Windows 10自带工具 校验MD5 SHA1 SHA256类型文件
使用Windows 10自带工具 校验MD5 SHA1 SHA256类型文件 适用场景:下载文件的完整性校验等. cmd调出命令行,输入如下命令 certutil -hashfile <文件名& ...
- windows10下使用certutil工具对下载文件进行SHA1、MD5、SHA256校验
windows10下使用certutil工具对下载文件进行SHA1.MD5.SHA256校验 校验的命令格式如下: 下面以SHA1哈希校验举例 要先通过cmd进入目标文件的目录下,再进行哈希校验,否则 ...
最新文章
- 如何建立和维护自己的“人脉”
- 柴油发电机并机母线之间母联的设置分析
- PMCAFF | 团队有20名产品经理,如何争取更多开发资源?
- js ajax 浏览器兼容,JS跨浏览器兼容,一点点总结
- 大数据平台蓝图_数据科学面试蓝图
- 根据年月日计算是星期几的函数,基姆拉尔森计算公式
- vba 循环读取单元格_利用VBA打开顺序文件,并读取
- SQLServer基础之数据页类型:GAM,SGAM,PFS
- 【实践】一站式数据开发平台在有赞的最佳实践.pdf(附下载链接)
- 使用Eclipse编写Processing小程序
- python数值类型和序列类型_Python基础 1数值类型 序列类型
- android viewpager 底部tabhost,TabHost+ViewPager实现底部导航效果
- Django中文文档
- 大话设计模式之爱你一万年:第一章 设计模式基本概念:1.软件设计模式概述
- 周鸿伟揭秘华为事件,美国针对华为另有打算
- 实验吧-杯酒人生(凯撒解密,维基利亚密码)
- Redis应用项目---抢红包功能(二)
- 统计学上数据的处理和图标的展示原则
- 网络安全学习笔记——蓝队实战攻防
- excel毫秒、微妙运算
热门文章
- Linux debian利用ifconfig查看IP地址
- emulator-5554 offline问题
- parallel循环java_使用Java8新特性parallelStream遇到的坑
- 有些路,只能一个人走。
- 秦纪二 秦始皇帝二十年(甲戌,公元前227年)——摘要
- 一种巧妙的解决方案,一键恢复Win11中消失不见的“Microsoft Store”微软应用商店
- 台式机U盘安装Centos 安装界面黑屏并且没有网卡驱动
- 2022 下半年一定不要裸辞!
- 项目经理的“势能”培养 (转)
- Verilog中$finish和$stop的区别