同一个文件在windows和linux下计算md5哈希不一致的原因及解决方法
最近项目需要,需要对客户传过来的文件进行MD5校验,在实现的过程中前前后后遇到了若干问题,在这里总结一下。
md5的计算采用openssl实现,具体代码网上很多,这里不再赘述。需要注意的问题
1 读取文件内容时,文件打开方式要用二进制方式(rb),因为用户文件有可能是linux格式,如果用文本方式打开,可能会改变原始的内容,造成计算不准。
2 结果检验。windows可以随便下载一个md5计算工具,网上很多,我用的是HashMyFiles。linux下面,md5sum 文件名 即可。
还有一个隐藏得问题需要注意,我们在这里好一阵郁闷。
程序编写完毕,再windows测试都通过了,把文件上传到linux,再运行程序,居然算出来的md5哈希和windows不一样。
经过一阵跟踪、断点、打印发现,文件上传到linux后,大小居然发生了变化,原来问题出在ftp,ftp上传得过程中采用了文本模式,会把文件中换行回车替换为换行。于是重新用二进制模式上传,计算结果一致,问题解决。
总结一下:文件打开读取要用二进制方式,文件传输也要用二进制方式。
以上这篇同一个文件在windows和linux下计算md5哈希不一致的原因及解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持我们。
相关推荐
-
同一个文件在windows和linux下计算md5哈希不一致的原因及解决方法
最近项目需要,需要对客户传过来的文件进行MD5校验,在实现的过程中前前后后遇到了若干问题,在这里总结一下. md5的计算采用openssl实现,具体代码网上很多,这里不再赘述.需要注意的问题 1 读取文件内容时,文件打开方式要用二进制方式(rb),因为用户文件有可能是linux格式,如果用文本方式打开,可能会改变原始的内容,造成计算不准. 2 结果检验.windows可以随便下载一个md5计算工具,网上很多,我用的是HashMyFiles.linux下面,md5sum 文件名 即可. 还有一个隐
-
linux下因为系统编码问题造成乱码的快速解决方法
最近一段时间遇到一些润乾的应用在linux系统下面乱码的问题,最后检查后都发现是客户的linux系统默认编码设置的不正确造成的,这种原因造成乱码的现象一般都是程序里面写死了的中文字符能正常展现,但是从数据库中取出来的或者从程序中读出来的中文字符就会出现乱码. 下面就介绍一下由于linux系统编码设置不正确造成润乾报表应用乱码问题的解决办法. 第一步:检查linux的系统编码. 检查linux的系统编码,确定系统是否支持中文.在linux系统的终端中输入命令:locale,就会看到打印出的系统编码
-
Linux下Tomcat启动正常,但浏览器无法访问的解决方法
1.服务器可ping通 2.服务器抓本地的http请求包,可以抓到 3.本地抓服务器返回的http响应包,抓不到 经过查找,是由于开启了Linux防火墙 查看防火墙配置(需要root权限) [root@localhost ~]# service iptables status Redirecting to /bin/systemctl status iptables.service iptables.service - IPv4 firewall with iptables Loaded: l
-
Linux下安装软件包报依赖等相关问题的解决方法
目录 背景 1)开启 yum 的 keepchche 功能:方法1 2) yum-utils 软件:方法2 3) lrzsz 下载上传 背景 在内网服务器下无法利用yum进行安装,需要自行安装可能会出现相关依赖报错(依赖软件包版本不兼容)的情况出现,解决思路:可以找一台相同操作系统版本且支持yum下,通过已安装的软件包拷贝到另一台机器上进行安装. 1)开启 yum 的 keepchche 功能:方法1 vi /etc/yum.conf keepcache =1 # 修改为1 例:安装 iptab
-
PHP fgetcsv 定义和用法(附windows与linux下兼容问题)
PHP fgetcsv 定义和用法 PHP fgetcsv() 函数从文件指针中读入一行并解析 CSV 字段. 与PHP fgets() 类似,不同的是 PHP fgetcsv() 解析读入的行并找出 CSV 格式的字段,然后返回一个包含这些字段的数组. fgetcsv() 出错时返回 FALSE,包括碰到文件结束时. 注释:从 PHP 4.3.5 起,PHP fgetcsv() 的操作是二进制安全的. 语法 fgetcsv(file,length,separator,enclosure) 参数
-
windows、linux下打包Python3程序详细方法
最近项目中需要Python的打包,看到网上也没有很详细的资料,于是做了一些示例程序.研究了一下,Python如何在Windows和Linux上打包 背景 Python版本:3.6. Windows版本:Windows 10 家庭中文版 64-bit (10.0, Build 18362) (18362.19h1_release.190318-1202) Linux版本:centos7. Python打包工具 今天没时间研究cx_Freeze,先研究了一下PyInstaller. py2exe p
-
Windows和Linux下Python输出彩色文字的方法教程
前言 最近在项目中需要输出彩色的文字来提醒用户,以前写过,但是只能在win上面运行. 今天搜了下看有没有在win和Linux上通用的输出彩色文字的模块,结果发现没有,,于是就自己弄了一个,分享下,以后用的时候翻翻博客,方便别人也方便自己. win下输出彩色文字,网上有两种方法一种是用system执行命令来设置颜色,感觉还是不太好,用ctypes模块实现更好点. linux下设置颜色,网上只找到了一种方法,下面不废话了,直接贴下代码: 示例代码 import platform if 'Window
-
python在windows和linux下获得本机本地ip地址方法小结
本文实例总结了python在windows和linux下获得本机本地ip地址方法.分享给大家供大家参考.具体分析如下: python的socket包含了丰富的函数和方法可以获得本机的ip地址信息,socket对象的gethostbyname方法可以根据主机名获得本机ip地址,socket对象的gethostbyname_ex方法可以获得本机所有ip地址列表 第一种方法:通过socket.gethostbyname方法获得 import socket localIP = socket.gethos
-
linux下查看已经安装的jdk 并卸载jdk的方法(推荐)
一.查看Jdk的安装路径: whereis java which java (java执行路径) echo $JAVA_HOME echo $PATH 备注:如果是windows中,可以使用: set java_home:查看JDK安装路径 java -version:查看JDK版本 二.卸载旧版本的JDK: 1. 确定JDK的版本: rpm -qa | grep jdk rpm -qa | grep gcj 可能的结果是: libgcj-4.1.2-42.el5 java-1.4.2-gcj-
-
Linux下查看进程打开的文件句柄数和如何修改方法
修改文件句柄数在Linux下,我们使用ulimit -n 命令可以看到单个进程能够打开的最大文件句柄数量(socket连接也算在里面).系统默认值1024. 对于一般的应用来说(象Apache.系统进程)1024完全足够使用.但是如何象squid.mysql.java等单进程处理大量请求的应用来说就有 点捉襟见肘了.如果单个进程打开的文件句柄数量超过了系统定义的值,就会提到"too many files open"的错误提示.如何知道当前进程打开了多少个文件句柄呢?下面一段小脚本可以帮
随机推荐
- 详解AngularJS中ng-src指令的使用
- VB XMLHTTP使用方法
- jQuery EasyUI Tab 选项卡问题小结
- CentOS下Redis数据库的基本安装与配置教程
- 详解Angular4中路由Router类的跳转navigate
- asp.net中出现CGI Timeout的解决办法
- 解决iOS7上UITextField限制字数输入导致崩溃问题的方法
- PHP实现显示照片exif信息的方法
- 解析PHP中的unset究竟会不会释放内存
- 获取焦点时,利用js定时器设定时间执行动作
- SQL Server数据库按百分比查询出表中的记录数
- Linux centos7环境下MySQL安装教程
- 使用jQuery实现返回顶部
- jquery动态添加文本并获取值的方法
- Jqgrid表格随窗口大小改变而改变的简单实例
- Android TabLayout实现京东详情效果
- JavaScript与C# Windows应用程序交互方法
- C# 创建报表过程详解
- Java日期处理工具类DateUtils详解
- PHP实现的猴王算法(猴子选大王)示例