JAVA 获取文件指纹
文章目录
- 一、使用场景
- 二、加密算法
- 三、源码演示
一、使用场景
检测文件是否被篡改:
在文件上传到服务器的时候,我们希望能够获得文件的指纹以确定文件没有被篡改过不存储重复文件信息:
在文件上传到服务器的时候,为了节省服务器的存储空间,我们可以对文件指纹进行比对,存在的指纹文件,无需再次保存到文件服务器
二、加密算法
常用哈希算法:
MD4
1990 年,输出 128 位(已经不安全)MD5
1991 年,输出 128 位(已经不安全)SHA-0
1993 年 输出 160 位(发布之后很快就被 NSA 撤回,是 SHA-1 的前身)SHA-1
1995 年,输出 160 位(已经不安全)SHA-2
包括:SHA-224
、SHA-256
、SHA-384
、SHA-512
,分别输出 224、256、384、512 位(目前安全)
哈希算法特点:
- 正像快速:原始数据可以快速计算出哈希值
- 逆向困难:通过哈希值基本不可能推导出原始数据
- 输入敏感:原始数据只要有一点变动,得到的哈希值差别很大
- 冲突避免:很难找到不同的原始数据得到相同的哈希值
三、源码演示
获取目标文件
/*** 读取本地文件到比特数组** @param file 文件对象* @return byte[] 文件数组*/ public static byte[] readRandomAccess(File file) throws IOException {// 1、使用 RandomAccessFile 打开文件管道FileChannel channel = new RandomAccessFile(file, "r").getChannel();int fileSize = (int) channel.size();try {// 2、创建 MappedByteBuffer,并使用 NIO 管道进行数据映射,加载数据到物理内存//load(): 将此缓冲区的内容加载到物理内存中。此方法尽最大努力确保当它返回时,缓冲区的内容驻留在物理内存中。调用此方法可能会导致出现一些页面错误和I/O操作。MappedByteBuffer buffer = channel.map(FileChannel.MapMode.READ_ONLY, 0, fileSize).load();//remaining() 返回当前位置和限制之间的元素数。此缓冲区中剩余的元素数byte[] result = new byte[fileSize];if (buffer.remaining() > 0) {// 3、读取数据到 byte 数组中buffer.get(result, 0, fileSize);}buffer.clear();return result;} finally {closeChannel(channel);} }private static void closeChannel(FileChannel channel) {try {channel.close();} catch (IOException e) {e.printStackTrace();} }
采用 MD5 哈希
/*** 生成文件 MD5 指纹** @param fileData 文件内容比特数组* @return java.lang.String 文件内容 MD5 指纹*/ public static String generateFileMd5Hash(byte[] fileData) {return DigestUtils.md5Hex(fileData); }
P.S
DigestUtils.md5Hex
有很多重载,可以根据实际情况选择采用 SHA 哈希
/*** 生成文件 SHA 指纹** @param fileData 文件内容比特数组* @return java.lang.String 文件内容 SHA 指纹*/ public static String generateFileSha256Hash(byte[] fileData) {return DigestUtils.sha256Hex(fileData); }
P.S
DigestUtils.sha256Hex
有很多重载,可以根据实际情况选择演示结果
public static void main(String[] args) throws IOException {File file = new File("/Users/rambo/Desktop/1.txt");byte[] bytes = readRandomAccess(file);String md5Hash = generateFileMd5Hash(bytes);String shaHash = generateFileSha256Hash(bytes);System.out.println("MD5 指纹:" + md5Hash);System.out.println("SHA 指纹:" + shaHash); }
MD5 指纹:0615ce4d9d3c12bf493bab656dd65dd0 SHA 指纹:b1f63d223f7c733b62243d7f55961ab4ad38d92ec413a03c7bed51288aa22323
JAVA 获取文件指纹相关推荐
- Java 查看文件绝对路径,JAVA获取文件绝对路径的方法
本文实例讲述了JAVA获取文件绝对路径的方法.分享给大家供大家参考.具体实现方法如下: /** * 获取一个类的class文件所在的绝对路径. 这个类可以是JDK自身的类,也可以是用户自定义的类,或者 ...
- 用Java获取文件的MD5校验和
我正在寻找使用Java获取文件的MD5校验和. 我真的很惊讶,但是我找不到任何能显示如何获取文件的MD5校验和的东西. 怎么做? #1楼 Guava现在提供了一个新的,一致的哈希API,它比JDK中提 ...
- 如何获取服务器上文件的hashcode,java获取文件hashcode
java获取文件hashcode [2021-02-05 18:36:57] 简介: php去除nbsp的方法:首先创建一个PHP代码示例文件:然后通过"preg_replace(&quo ...
- Java获取文件路径
Java获取文件路径 1.获取当前文件所在的包名 2.获取工程文件夹所在的绝对路径 3.获取当前class文件所在的绝对路径 1.获取当前文件所在的包名 类名.class.getPackage().g ...
- java 获取文件扩展名_如何在Java中获取文件扩展名
java 获取文件扩展名 Sometimes while working with files, we need to process them differently based on their ...
- java获取文件编码
目录 1. 概述 2. 编码基本知识 2.1. iso8859-1 2.2. GB2312/GBK 2.3. unicode 2.4. UTF 3.JAVA中移位运算>> , <&l ...
- java获取文件列表,[javaSE] java获取文件列表
递归测试 import java.io.File; import java.util.ArrayList; import java.util.HashMap; import java.util.Lis ...
- java 获取文件夹下所有文件
java 获取文件夹下所有文件 以下两个函数实现获取文件夹下所有文件 /*** 获取指定文件夹下所有文件,不含文件夹里的文件** @param dirFilePath 文件夹路径* @return*/ ...
- java获取文件和照片创建时间
java获取文件创建时间 获取文件创建时间 获取照片创建时间 由于要获取照片创建的时间,也就是数字化的时间,即拍摄时间:开始通过网上搜索的获取文件时间都是本机电脑创建此文件的时间,路子不对,不符合要求 ...
- java 获取文件权限_Java中的文件权限,检查权限和更改权限 - Break易站
Java提供了许多方法调用来检查和更改文件的权限,例如可以将只读文件更改为具有写入权限.当用户想要限制文件允许的操作时,需要更改文件权限.例如,文件权限可以从写入更改为只读,因为用户不再想要编辑文件. ...
最新文章
- 3D机器人视觉在仓储物流和工业自动化领域的应用 | AI ProCon 2019
- opencv投影变换
- 在离线环境中安装Visual Stuido 2017
- 9个元素换6次达到排序序列_(算法四)高级排序(快速排序)
- Python 命令行之旅:深入 click 之参数篇
- SXSSFWorkbook使用——使用excel模板
- java继承父类执行顺序_java中子类继承父类程序执行顺序问题
- 老款 iPhone 涨价;微软 AI 研究院落户上海;刘强东不参加人工智能大会 | 极客头条...
- c语言不能正确输出最小值,C语言综合测试.doc
- PHP常用正则类(全)
- 科创人·黑湖科技CEO周宇翔:To B产品不应忽视产品体验,制造业的未来是需求定义生产
- java myqq ui,MYQQ JAVA语言开发的QQ聊天系统,可以添加,删除,好友,支持在线,离线发送消 能 文 ICQ-IM-Chat 238万源代码下载- www.pudn.com...
- 利用Apache Tika分页解析pdf文件内容
- python except exception_Python 获取异常(Exception)信息的几种方法
- QQ被盗恢复原来QQ的好友有妙招
- centos linux引导修复_Linux 引导修复
- Yonex 各系列球拍指数
- 计算机考研考电路学校,集成电路工程考研学校排名
- 华字后面配什么字比较好_和华字搭配的男孩名字 华后面取什么名字男孩 带华字好听好寓意男孩名...
- cg of spears storm_Steam 上的 Storm Of Spears RPG
热门文章
- ThinkPad SL400无线网卡的问题
- SECRET文件保险柜 V2.7 --统一管理并加密文件
- sqliteman安装时出现The following packages have unmet dependencies: libqtgui4 : Depends: libpng12-0错误
- 使用阿里云Ubuntu搭建代理服务器
- 电视家3.0怎么安装到电视上?常用三种方法介绍
- (总结归纳)常用电子元件,封装,库
- 1.6万亿参数的语言模型:谷歌大脑提出Switch Transformer,预训练速度可达T5的7倍
- 51单片机自学笔记(三)——电子电路基础
- 深度学习论文阅读目标检测篇(六)中英对照版:YOLOv3《 An Incremental Improvement》
- 制作学术PPT的注意事项如何制作模板(附模板下载链接)