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

大佬们,解决一下我的疑问吧!!!!!
15783 次点击
所在节点    问与答
134 条回复
qq2511296
2020-12-24 16:44:24 +08:00
把这个 iOS 开除了吧,太菜了,看这 iOS 是 base64 的格式
JKeita
2020-12-24 16:45:38 +08:00
MD5 这种标准算法使用频率那么高的都能搞错,建议直接开除得了,真丢人。
lovecy
2020-12-24 16:47:36 +08:00
@BenchWidth 你给的值我转了半天没有对上。。还以为我算错了。。
另外那个 ios 的 base64,我这边 decode 也失败,手动把 md5 区 encode 也对不上。。
怀疑人生中
JKeita
2020-12-24 16:47:46 +08:00
如果是我真直接怼了,这种都能搞错,完全不能忍。
BenchWidth
2020-12-24 17:08:23 +08:00
@lovecy 恼火。。。。。头大!啥时候我去给接口加个正则校验,md5 正则校验不通过的就不让他们传了。
prodcd
2020-12-24 17:13:54 +08:00
md5 结果大多时候都直接用 32 个 16 进制字符表示,java 那样是最常见形式。也有用 16 个字符的比较少见。安卓和 ios 还敢拿出来与你比较,明显水平不够,建议开除。
安卓那个没看懂是什么算法,26 个字符,还有 u 、n 、g 、r……哪位高手给解释下?
ios 的看起来像 base64,但我没解析出来,是不是把 md5 的 128bit 给 base64 了?
AoEiuV020
2020-12-24 17:20:52 +08:00
一般说的 md5 指的是 hex(md5),也就是 md5 产生 16 字节数据之后再 16 进制编码产生 32 位字符串,一般还要统一规定大小写,认识这一点就好办了,
然后空格大概率是 ios 的 base64 字符串出现加号+被后端框架自动解码成空格了,
我这边规定加密算法时都会详细说明每一步,比如 hex(md5(aes(userId,md5(password)))),解释每一步并在每一步给个示例供其他端统一参考,
linKnowEasy
2020-12-24 17:28:00 +08:00
@BenchWidth #105 建议让他们使用第三方库吧. 自己先在网上 对照什么在线 MD5 工具....
AlbertWei
2020-12-24 17:38:14 +08:00
iOS 程序员风评被害,建议开除。
zhengdai1990
2020-12-24 17:40:08 +08:00
牛逼了,你们这开发都啥水平
znyq2019
2020-12-24 17:40:11 +08:00
iOS 风评日下啊 太难了
ai277014717
2020-12-24 17:41:51 +08:00
这帮人写完了不本地验证一下吗
Blanke
2020-12-24 18:24:15 +08:00
编程语言不一样算出来的就是不一样的,而且 ios 他说没法算出我这种 md5 数值?
说这种话的,建议开除
zachlhb
2020-12-24 18:32:04 +08:00
编码不同,转成统一的编码方式
leapV3
2020-12-24 18:33:33 +08:00
ios 是 base64,而且 md5 是一个统一算法,同样的数据,获得结果应该一样
leapV3
2020-12-24 18:35:24 +08:00
而且安卓还是 25 位 这是有其它操作吧
codespots
2020-12-24 18:42:08 +08:00
@Blanke 和语言有什么关系? md5 是一个算法,按照规范实现,一千万种语言出来的结果都是一样的
codespots
2020-12-24 18:43:01 +08:00
@Blanke sorry,看错了,以为是你说的
Misakiye
2020-12-24 19:00:35 +08:00
“编程语言不一样算出来的就是不一样的”哈哈哈哈哈哈哈
sxbxjhwm
2020-12-24 19:01:49 +08:00
ios 这个。。勉强是个 hash 吧
```
var str = atob('Z+L6tJUcklneku8zMPoqcw=='), op = '';
for (var i in str) {
op += str[i].charCodeAt().toString(16);
}
console.log(op); // 67e2fab4951c9259de92ef3330fa2a73
```

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

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

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

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

© 2021 V2EX