首页 > 其他分享 >一个由计算MD5值而引发的Bug

一个由计算MD5值而引发的Bug

时间:2023-09-14 15:05:06浏览次数:26  
标签:fis fr 引发 IOUtils MD5 Bug md5


昨天联调某接口时发现一个的Bug,还好很快找到原因并紧急修复了。

某文件A.tar.gz使用apache commons-compress计算的MD5值:

FileReader fr= new FileReader(tarFile);
String md5 = DigestUtils.md5Hex(IOUtils.toByteArray(fr));
IOUtils.closeQuietly(fr);
System.out.println("MD5:"+md5);

与使用命令:

md5sum A.tar.gz

后显示的MD5值竟然不一样。

话说当时还真就奇怪了,难道commons compress有Bug?

其实不然。

问题是出在了FileReader上:Reader是按字符读取文件,而InputStream是按字节读取文件。此处是压缩文件而不是文本文件,使用Reader读取后计算的MD5值是错误的。改成这样:

FileInputStream fis= new FileInputStream(tarFile);
String md5 = DigestUtils.md5Hex(IOUtils.toByteArray(fis));
IOUtils.closeQuietly(fis);
System.out.println("MD5:"+md5);

这样再和md5sum做比较,发现结果就完全相同了。

希望对大家有所帮助。

 

标签:fis,fr,引发,IOUtils,MD5,Bug,md5
From: https://blog.51cto.com/u_6978506/7470416

相关文章

  • MySQL篇:bug2_ Navicate无法添加或更新子行-外键约束失败
    问题产生原因Mysql中如果表和表之间建立的外键约束,则无法删除表及修改表结构。解决办法解决方法是在Mysql中取消外键约束:SETFOREIGN_KEY_CHECKS=0;再添加值,然后再设置外键约束:SETFOREIGN_KEY_CHECKS=1;查看当前FOREIGN_KEY_CHECKS的值可用如下命令:SELECT@@FOR......
  • java安全架构____java MD5加密
    packagecom.security.md5;importjava.security.MessageDigest;/***@authormd5**/publicclassMd5{ publicstaticvoidmain(String[]args)throwsException{ System.out.println("简单md5加密____:"+md5Encode("123456")); //避免不同......
  • Qt Debug 不下去的一个解决方法
    今天遇到一个难题。在debug时,使用qt函数载入自写的dll时,载入时,崩溃。如果不用F5可以顺利运行删除临时文件文件夹等方式都试过,问题依然存在。当我删除所有的断点后,重新编译,然后设置断点,跟踪运行正常。问题原因没有找到。错误关键词:ZwMapViewOfSection ......
  • Bug库____org.springframework.jdbc.IncorrectResultSetColumnCountException: Incorr
    Bug:使用到了spring的jdbctemplate模板使用到以下template.queryForObject(sql,requiredType)template.queryForList(sql,elementType,args)报以下错误org.springframework.jdbc.IncorrectResultSetColumnCountException:Incorrectcolumncount:expected1,actual3检查完......
  • MySQL篇:bug1_navicat添加外键保存后不起作用(消失)
    问题在Nacicatpremium中添加外键一保存就消失用SQL语句也显示创建成功,没有报错,可是在INSERT中又起不到约束作用解决办法参考一下资料发现可能是表的类型不支持外键要在MySQL声明外键,用户应该紧记几个要点:两个表必须是InnoDB类型。在参考的表,必须有一个索引,参考的列被......
  • 佛祖保佑 永无bug 永不宕机
    _ooOoo_o8888888o88"."88(|-_-|)O\=/O____/`---'\____.'\\||//`./\\|||:|||//\......
  • BUG库(Maven)Failed to execute goal org.apache.maven.plugins:maven-surefire-plugi
    一.Maven打包失败1.场景-项目中打包执行测试类报错 Failedtoexecutegoalorg.apache.maven.plugins:maven-surefire-plugin:2.12.4:test二.解决方案1.idea工具跳过选择按钮2.在pom文件中添加插件<plugin><groupId>org.apache.maven.plugins</groupId><artifactI......
  • BUG(Spring Framework JdbcTemplate) org.springframework.jdbc.IncorrectResultSetCo
    一.SpringFramework queryForObject问题1.spring4.0之前使用使用jdbctemplate的queryForObject(Stringsql,Object[]args,RowMapper<T>rowMapper)直接放入class类型会报错org.springframework.jdbc.IncorrectResultSetColumnCountException:Incorrectcolumncount:expec......
  • BUG库(linux)tar文件解压: Exiting with failure status due to previous
    一.Bug场景描述linux下解压文件tar:Exitingwithfailurestatusduetopreviouserrors二.解决办法1.提升源权限chmod777 mysql-8.0.15-linux-glibc2.12-x86_64.tar.xz2.提升目标路径权限chmod-R777 mysql3.sudo执行  ......
  • 【chatgpt】base64计算快 还是md5计算快
    在计算速度方面,Base64和MD5有不同的应用场景。Base64是一种编码算法,用于将二进制数据转换为文本格式,常用于在网络传输中传递二进制数据。Base64的计算速度通常很快,因为它只需要进行简单的位运算和查表操作,没有复杂的运算过程。MD5是一种哈希算法,用于计算数据的哈希值。它将任意......