md5文件校验 java代码_MD5文件校验码生成java代码

2023-10-29

import java.io.File;

import java.io.FileInputStream;

import java.io.IOException;

import java.io.InputStream;

import java.nio.MappedByteBuffer;

import java.nio.channels.FileChannel;

import java.security.MessageDigest;

import java.security.NoSuchAlgorithmException;

public class MD5Util {

/**

* 默认的密码字符串组合,用来将字节转换成 16 进制表示的字符,apache校验下载的文件的正确性用的就是默认的这个组合

*/

protected static char hexDigits[] = { '0', '1', '2', '3', '4', '5', '6',

'7', '8', '9', 'a', 'b', 'c', 'd', 'e', 'f' };

protected static MessageDigest messagedigest = null;

static {

try {

messagedigest = MessageDigest.getInstance("MD5");

} catch (NoSuchAlgorithmException nsaex) {

System.err.println(MD5Util.class.getName()

+ "初始化失败,MessageDigest不支持MD5Util。");

nsaex.printStackTrace();

}

}

/**

* 生成字符串的md5校验值

*

* @param s

* @return

*/

public static String getMD5String(String s) {

return getMD5String(s.getBytes());

}

/**

* 判断字符串的md5校验码是否与一个已知的md5码相匹配

*

* @param password 要校验的字符串

* @param md5PwdStr 已知的md5校验码

* @return

*/

public static boolean checkPassword(String password, String md5PwdStr) {

String s = getMD5String(password);

return s.equals(md5PwdStr);

}

/**

* 生成文件的md5校验值

*

* @param file

* @return

* @throws IOException

*/

public static String getFileMD5String(File file) throws IOException {

InputStream fis;

fis = new FileInputStream(file);

byte[] buffer = new byte[1024];

int numRead = 0;

while ((numRead = fis.read(buffer)) > 0) {

messagedigest.update(buffer, 0, numRead);

}

fis.close();

return bufferToHex(messagedigest.digest());

}

/**

* JDK1.4中不支持以MappedByteBuffer类型为参数update方法,并且网上有讨论要慎用MappedByteBuffer,

* 原因是当使用 FileChannel.map 方法时,MappedByteBuffer 已经在系统内占用了一个句柄,

* 而使用 FileChannel.close 方法是无法释放这个句柄的,且FileChannel有没有提供类似 unmap 的方法,

* 因此会出现无法删除文件的情况。

*

* 不推荐使用

*

* @param file

* @return

* @throws IOException

*/

public static String getFileMD5String_old(File file) throws IOException {

FileInputStream in = new FileInputStream(file);

FileChannel ch = in.getChannel();

MappedByteBuffer byteBuffer = ch.map(FileChannel.MapMode.READ_ONLY, 0,

file.length());

messagedigest.update(byteBuffer);

in.close();

return bufferToHex(messagedigest.digest());

}

public static String getMD5String(byte[] bytes) {

messagedigest.update(bytes);

return bufferToHex(messagedigest.digest());

}

private static String bufferToHex(byte bytes[]) {

return bufferToHex(bytes, 0, bytes.length);

}

private static String bufferToHex(byte bytes[], int m, int n) {

StringBuffer stringbuffer = new StringBuffer(2 * n);

int k = m + n;

for (int l = m; l < k; l++) {

appendHexPair(bytes[l], stringbuffer);

}

return stringbuffer.toString();

}

private static void appendHexPair(byte bt, StringBuffer stringbuffer) {

char c0 = hexDigits[(bt & 0xf0) >> 4];// 取字节中高 4 位的数字转换, >>> 为逻辑右移,将符号位一起右移,此处未发现两种符号有何不同

char c1 = hexDigits[bt & 0xf];// 取字节中低 4 位的数字转换

stringbuffer.append(c0);

stringbuffer.append(c1);

}

public static void main(String[] args) throws IOException {

long begin = System.currentTimeMillis();

File file = new File("E:/txt.txt");

if(!file.exists()){

System.out.println("不存在");

}

String md5 = getFileMD5String(file);

// String md5 = getMD5String("a");

long end = System.currentTimeMillis();

System.out.println("md5:" + md5 + " time:" + ((end - begin) / 1000) + "s");

System.out.println(file.getPath());

}

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

md5文件校验 java代码_MD5文件校验码生成java代码 的相关文章

  • Typescript 基础类型 —— 布尔值 Boolean

    在JavaScript和TypeScript里布尔值都叫做boolean 表示逻辑值 true 和 false 关键字 boolean 实例 let isRes boolean false 编译结果 var isRes false 试图给
  • 【读懂Autosar代码】-1-概述

    点击返回 Autosar从入门到精通 实战篇 总目录 案例背景 共5页精讲 聊一聊这些封装中关键字宏的命名是如何构成的 FUNC FUNC P2CONST FUNC P2VAR P2VAR P2CONST CONSTP2VAR CONSTP
  • 论文期刊一般的审稿流程

    一 经常在网上看到某某人在问什么期刊的审稿周期 或者是投稿已多久怎么还没消息之类的帖子 作为经常帮国内外期刊审稿的人 对编辑部相对有所了解 因此特意发帖告知 供大家交流 论文审稿是个复杂的过程 并不是像大部分作者想象的那样送个一个专家看个几
  • String 判断字符串是否包含某个字符

    contains 判断 s 是否包含 ss 包含返回true 不包含返回false String s 你好 String ss 你 boolean ii s contains ss if ii true System out println
  • STM32调试特定函数出现Cannot access Memory

    MDK5出现Cannot access Memory 1 问题 2 原因 3 总结 1 问题 程序每次执行到了特定函数的位置时 keil里面全速运行 一直出现Cannot access Memory 再后面就是进入硬件错误中断了 执行到这个
  • C#使用COM+实现事务控制,操作多个数据库

    其中大部分内容参考自http blog itpub net 10752043 viewspace 991224 上面的是sqlserver的操作方式 因为我实际项目是用的oracle 就拿oracle试了一下 为了自己记录或者方便其他人 其
  • Linux下如何配置环境变量

    基础知识 首先 我们来了解一下什么是 环境变量 环境变量 通俗讲是操作系统或程序执行时候默认设定的参数 比如 PATH 路径变量 当要执行某个命令或程序的时候默认寻找的路径 然后 我们再来了解一下环境变量都有哪些类型 环境变量的分类 根据变
  • C++的类型

    C 的类型 按照标准 C 只有两种类型 基本类型和复合类型 但是里面细节多导致彻底理解它们有难度 所以这里只是简单总结一下 基本类型 基本类型分成算术类型和两种特殊的类型 算术类型 算术类型分成整数类型和浮点数类型两种 整数类型 以下都是整
  • 在springboot中使用Sse(Server-sent Events)Web实时通信技术-服务器发送事件SseEmitter

    最近在练习项目时需要用到消息实时推送技术 了解到有两种实时通信技术供我选择 SSE和WebSocket 详细了解后得知SSE是基于http协议 无需导入其他依赖 特点是服务端主动给客户端推送消息 单向 适合浏览器端只做数据接收 而webso
  • 华为OD机试真题-路灯照明问题-2023年OD统一考试(B卷)

    题目描述 在一条笔直的公路上安装了N个路灯 从位置0开始安装 路灯之间间距固定为100米 每个路灯都有自己的照明半径 请计算第一个路灯和最后一个路灯之间 无法照明的区间的长度和 输入描述 第一行为一个数N 表示路灯个数 1 lt N lt
  • Pysot训练自己的数据集

    数据集预处理操作 Pysot训练自己数据集前的预处理 Vesper0412的博客 CSDN博客 Pysot源码地址 https github com STVIR pysot 1 linux系统激活环境 conda activate pyto
  • 机器学习课程学习阶段总结

    机器学习课程学习阶段总结 线性回归 逻辑回归 逻辑回归 是一种分类算法 和之前的线性回归不是同一类问题 但是对于处理问题上有相同的思想 对于线性回归问题 有较容易理解的思路 首先指定一个形式确定的 h x Tx h theta x thet
  • 笔记本连接RK61键机械键盘非损坏的win和alt对调,数字键失灵以及特殊字母键失灵恢复

    1 问题描述 在打游戏或者码字的时候 无意中按下了键盘模式切换按键 导致了键盘的假性失灵状态 具体表现为 1 win和alt键功能对调 win按键无反应 alt键出现windows窗口 虽然不影响使用 但是很别扭 2 数字键失灵 键盘打不出
  • 网络安全有哪些经典笑话

    今天程序员同事发了一个链接给我 点开是一个调侃程序员有哪些经典笑话的帖子 给我看乐了 诸如 老婆给当程序员的老公打电话 下班顺路买一斤包子带回来 如果看到卖西瓜的 就买一个 当晚 程序员老公手捧一个包子进了家门 老婆怒道 你怎么就买了一个包
  • Android BLE 快速开发示例

    目录 概述 1 FastBle的使用 2 BLE开发实践方面的理解 3 FastBle源码解析 概述 思来想去 还是写这篇博文 记录一下 当时学习BLE的一些心得 重捡回当前Android知识 想深入了解蓝牙通讯知识 这个案例是非常不错的选
  • 毕业设计 - 基于单片机的测谎仪

    文章目录 1 简介 2 实现原理 3 主要器件 4 实现效果 正常情况 未说谎 异常情况 说谎了 5 部分实现代码 6 最后 1 简介 Hi 大家好 学长今天向大家介绍一个有趣的单片项目 基于单片机的测谎仪 大家可用于 课程设计 或 毕业设
  • 大数据技术(林子雨版)——期末复习知识点

    gt 大数据 云计算 大数据时代的三次信息化浪潮 时间 标志 解决的问题 代表企业 1980年前后 个人计算机 信息处理 Intel IBM 1995年前后 互联网 信息传输 谷歌 腾讯 2010年前后 大数据 云计算 物联网 信息爆炸 亚
  • Windows “Win+R“命令行运行常用命令

    Windows Win R 命令行运行常用命令 Windows操作系统提供了许多方便的方式来执行各种任务 其中之一是使用 Win R 运行命令行 这个快捷键组合可以让您迅速启动各种应用程序 工具和系统实用程序 而无需通过开始菜单或桌面快捷方
  • 【仲裁器】轮询仲裁round-robin,rr

    起因 在多主单从的设计中 当多个源端同时发起传输请求时 需要仲裁器根据优先级来判断响应哪一个源端 轮询仲裁 各个源端优先级相同 当其同时发起请求时 依次进行响应 电路图 代码 module rr arb input clk input rs

随机推荐

  • 区块链(二)-私有链的搭建

    私有链 搭建私有链 首先需要写一个创世块文件 创世块就是我自己链上的第一个区块 config nonce 0x0000000000000042 mixhash 0x00000000000000000000000000000000000000
  • 简单介绍Hyperledger fabric是什么

    Hyperledger Fabric作为超级账本的项目之一 目前基于它开发的区块链项目非常多 Linux基金会于2015年成立超级账本 以推进跨行业的区块链技术 相对于申报一个区块链标准 它鼓励通过社区合作的方式来发展区块链技术 带着知识产
  • 论git中使用https和ssh协议的区别

    论git中使用https和ssh协议的区别 SHELDON CUI S BLOG 2017 09 08 git https ssh 心得 http好还是ssh好 git可以使用四种主要的协议来传输资料 本地协议 Local HTTP 协议
  • TightVNC H264编解码(一)

    时光流逝 时间过的真快啊 疲于工作 发现近一个多月没写文章了 此文算是对最近的工作做个总结吧 经过尽二个月的不断摸索 TightVNC终于支持H264编解码了 前期真正编写H264编解码器只花了一周左右时间 但是测试发现效果并不是太理想 帧
  • 2022年android面试题,Android资深架构师分享学习经验及总结

    前言 最近有些朋友提问 Android QQ空间 换肤实现原理是什么 于是 我决定在这里做一下回答 对这个方面感兴趣的朋友也可以来看下 手q的换肤机制主要是通过拦截系统resource中的sPreloadedDrawables静态缓存变量
  • 为什么说“低估值买入,买到即赚到”?

    投资究竟能不能挣到钱 到底是由哪个环节决定的 买入还是卖出 直觉上说 这个问题的答案理所当然是 卖出 就连路边卖杂货的小商贩都明白 只要卖出价高于买入价 就可以挣到钱 直到我看了 穷查理宝典 接触到价值投资的理念 想法有了根本性改变 买入的
  • 对opencl helloworld代码的修正

    由于代码比较乱 数组也容易越界 故重新加了个类 用了stl vector 代码如下 test cl kernel void hello kernel global const float a global const float b glo
  • java jdbc线程池的使用

    好久没直接使用jdbc了 今天重温了一下相关知识 并对连接池的使用写了简单的示例 记录在此以便需要的同行参考和方便自己查阅 不足之处欢迎批评指正 1 dbcp数据源 所需jar包 dbcp 连接池的实现 commons pool2 连接池实
  • RedisTemplate 使用 Redis 缓存

    与使用注解方式不同 注解方式可以零配置 只需引入依赖并在启动类上加上 EnableCaching 注解就可以使用 而使用 RedisTemplate 方式麻烦些 需要做一些配置 Redis 配置 第一步还是引入依赖和在启动类上加上 Enab
  • 设计模式:策略模式

    我们玩游戏会有策略游戏 设计模式也会有策略模式 最开始接触策略模式的使用场景 是关于校验 针对不同的业务要进行不同的校验 同样的场景 优惠券折扣 不同渠道的信息发布等 Strategy Design Pattern 以下是GoF 是指提出和
  • 开发实况4.1.linux相关-CRT连接虚拟机提示用户名或密码错误

    文章目录 开发实况4 1 linux相关 CRT连接虚拟机提示用户名或密码错误 一 简介 二 问题解决 开发实况4 1 linux相关 CRT连接虚拟机提示用户名或密码错误 一 简介 已知我输入的用户名和密码正确但是却跳failed 二 问
  • Mac下使用GitHub+Hexo搭建个人博客

    首发链接 开始之前需要在电脑上安装好Git和node js Mac上可以使用Homebrew命令行工具来安装Git和node js 安装Homebrew 在命令行工具输入以下命令 如果已经安装过Homebrew可以忽略 usr bin ru
  • pjsip库使用时,顺序也有一定要求,

    LIBS PWD third lib pjsip lib libpjsua aarch64 unknown linux gnu a LIBS PWD third lib pjsip lib libpjsip ua aarch64 unkno
  • Arrays.asList(T...a)的使用问题

    我们经常会使用Arrays asList来初始化一个列表List 例如 List
  • 希尔排序图文详解+代码实现

    希尔排序也是一种插入排序 它是直接插入排序经过改进之后的一个更高效的版本 也称为缩小增量排序 性质 1 时间复杂度 O nlogn 2 空间复杂度 O 1 下面先介绍一下直接插入排序 理解了直接插入排序 希尔排序就很好理解了 实现代码也是由
  • 徐泽阳7.28黄金白银涨跌走势预测;期货原油实时策略指导

    黄金消息面与基本面解析 现货黄金反弹 因美元指数承压下行 但后者仍运行在92 50上方附近 在美联储政策会议召开之际 市场情绪趋于谨慎 美联储重点将围绕缩减购债以及对通胀飙升的忍耐度展开讨论 同时还要审慎考虑防疫形势可能的恶化 美元指数已从
  • mqtt 发送消息过多_物联网宠儿mqtt.js那些事儿

    常见的mq有Kafka RocketMQ和RabbitMQ 大家也很常见 前者很常见 MQTT是什么呢 MQTT属于IoT也就是物联网的概念 常见的mq有Kafka RocketMQ和RabbitMQ 大家也很常见 MQTT是什么呢 Kaf
  • utc时间转毫秒

    public class DateUtils private DateUtils public static final String FORMAT UTC yyyy MM dd T HH mm ss SSS Z public static
  • win10中Docker安装、构建镜像、创建容器、Vscode连接实例

    Docker方便一键构建项目所需的运行环境 首先构建镜像 Image 然后镜像实例化成为容器 Container 构成项目的运行环境 最后Vscode连接容器 方便我们在本地进行开发 下面以一个简单的例子介绍在win10中实现 Docker
  • md5文件校验 java代码_MD5文件校验码生成java代码

    import java io File import java io FileInputStream import java io IOException import java io InputStream import java nio