一个关于我的同事计算 md5 的问题!

2020-12-24 09:42:53 +08:00
 BenchWidth
由于项目的设计需要项目中资源上传的时候都是需要上传 md5 来校验文件,我是负责的网页前端与 java 后端部分的。

昨天,ios 端的兄弟说有时候文件上传之后有时候地址是不能访问的(公司用的阿里云 oss )。我去看了一些发现了文件名有许多的奇奇怪怪的字符,被后台替换为空格了。我问了一些 ios 的兄弟他说的是算出来的 md5 值。我也问了一下安卓的兄弟,发现我们三端计算出来的文件 md5 都有自己的格式。(我自己写的前端和后端的计算方法得出的都是一样的 md5 )

前端,java 后台:2cf8510722f63a433865b7b244738b22
安卓:fuo0n0ga3rfs9qo5dd5qdmq8c
ios:Z L6tJUcklneku8zMPoqcw==

前端和 java 后台是我自己写所以怎么算都是一样的。主要是安卓和 iso 他们和我说编程语言不一样算出来的就是不一样的,而且 ios 他说没法算出我这种 md5 数值。

我想的是 md5 难道不都是通过获取文件的二进制流再进行一系列的算法得出的一个固定的值嘛,难道说在不同的地方读取出来的文件二进制流不一样?或者说是使用的算法不一样?还是说只是他们没有找到方法而已?还是说是我自己算错了。

大佬们,解决一下我的疑问吧!!!!!
16249 次点击
所在节点    问与答
134 条回复
baijiahei
2020-12-24 09:47:29 +08:00
同一文件 md5 值相同
ios 端的看起来像 base64 后的 然后还有个空格 可能+号 后台接收的时候给过滤掉了
说不好 但是 ios 端的肯定是不对的
binbinyouliiii
2020-12-24 09:47:37 +08:00
你让他拿个简单字符算一下对比一下不就完了
ThirdFlame
2020-12-24 09:53:30 +08:00
md5 值 是 16*8=128bit
前端和 java 显示的是 hex 格式显示的。
ios 貌似是 base64 编码后显示的(不过也和 前端和 java 算的不一样)

同一个文件计算出来的 md 值( 128bit )是相同的,这是毋庸置疑的。
SjwNo1
2020-12-24 09:54:04 +08:00
啊哈 不同的编程语言 md5 算法不一样吗 坐等楼下解答
louiswang002
2020-12-24 09:55:07 +08:00
可能 iOS 端用了阿里云的工具类算出来的 md5,那个工具类里面有个函数,是 md5 之后 base64,这个值可以用于阿里云 oss 校验,可以让 iOS 的同事 review 代码
maro
2020-12-24 09:57:49 +08:00
一个 32 位 一个 24 位 一个干脆是 base64
whileFalse
2020-12-24 09:58:27 +08:00
都按照 linux 下的 md5sum 对齐,谁算出来和 md5sum 不一致就打回去重写
paullee
2020-12-24 10:03:48 +08:00
啊,你们缺少有话语权的人,这玩意儿能算出 3 个版本,那你们其他业务的坑恐怕只多不少。建议参照 7 楼的建议。
Citrus
2020-12-24 10:04:14 +08:00
安卓和 iso 他们和我说编程语言不一样算出来的就是不一样的

建议把说这话的人开掉。
msg7086
2020-12-24 10:08:38 +08:00
Z+L6tJUcklneku8zMPoqcw==
对应的 hex 是
67e2fab4951c9259de92ef3330fa2a73
和你算出来的不一样。

至于谁对谁错,各家 hash 工具解忧愁。
f6x
2020-12-24 10:10:56 +08:00
@whileFalse 你歧视其他操作系统. 命名 mac 和 win 下也有 md5sum
longaiwp
2020-12-24 10:11:57 +08:00
你管它哪个对哪个错,就按照 Linux 下的 md5sum 来,谁不一样就谁回去研究重写。
SjwNo1
2020-12-24 10:12:59 +08:00
重点关照下这位 ios 同学,胡言乱语
kx5d62Jn1J9MjoXP
2020-12-24 10:14:08 +08:00
这两个客户端都很优秀啊, 都是自己实现 md5 算法
一般菜鸟都是网上找一段代码复制粘贴一下
Rehtt
2020-12-24 10:18:18 +08:00
@f6x md5sum 本来最先出现在 linux 中,mac 和 win 都可以说是移植的
longaiwp
2020-12-24 10:19:17 +08:00
另外你们这位做 iOS 的人,估计技术不过关,建议要他多学习。
keepeye
2020-12-24 10:30:08 +08:00
你到网上找个 swift 的标准 MD5 算法扔给他。我估计他连 md5 是什么都不知道
BenchWidth
2020-12-24 10:30:30 +08:00
@ssynhtn 他就是网上找的计算 md5 的方式。。也不晓得哪儿找的(这就很头大了)
BenchWidth
2020-12-24 10:34:23 +08:00
@keepeye 我扔了一个 md5 标准算法,他说什么 ios 不能根据文件夹获取文件啥的,就是似乎拿不到文件的二进制流。。我也不懂 ISO 就没说什么了。
BenchWidth
2020-12-24 10:34:47 +08:00
@Citrus 好残忍,哈哈哈

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/738468

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX