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

大佬们,解决一下我的疑问吧!!!!!
15765 次点击
所在节点    问与答
134 条回复
1s1s
2020-12-24 13:38:03 +08:00
不敢看不敢看
djs
2020-12-24 13:39:04 +08:00
直接好家伙,这辆端开发有毒
glennv2ex
2020-12-24 13:41:02 +08:00
前端,java 后台看起来没问题 安卓的 25 位肯定不对 ios 的更离谱了
glennv2ex
2020-12-24 13:42:13 +08:00
欺负你这个老后端😄
BenchWidth
2020-12-24 13:44:46 +08:00
@glennv2ex 哭了哭了,太难了
guibin1989
2020-12-24 13:45:22 +08:00
iOS 程序员风评被害,建议开除。
longaiwp
2020-12-24 13:52:11 +08:00
@richChou 确实会有,哪怕都是 Jawa,Android 和 Jawa 原生的 Base64 也会有不同,内部的规则问题。但是这本质上不是哪个语言不能得出哪个样子的东西,只要你指定要哪样的,一定能搞出来的。
sss495088732
2020-12-24 13:55:30 +08:00
0.0 不用标准库自己写,去百度 CV?
SjwNo1
2020-12-24 13:55:45 +08:00
贵司的客户端能用吗哈哈
heliotrope
2020-12-24 14:04:27 +08:00
@richChou 确实会不一样呀 字符编码 填充方式 都有可能不一样
zjddp
2020-12-24 14:13:32 +08:00
提问:这三人至少有几个人有问题
huayumo
2020-12-24 14:16:59 +08:00
哈哈哈,ios 的要笑死了
local
2020-12-24 14:25:55 +08:00
这不至少 2 有问题吗
FallenTy
2020-12-24 14:27:50 +08:00
建议换个 ios 。
local
2020-12-24 14:31:04 +08:00
iOS 的看格式应该是 md5 后,又 base64 编码的结果
sarices
2020-12-24 14:32:08 +08:00
md5 不是一般都是把结果生成 32 位十六进制数字吗,ios 和安卓是什么鬼算法
dddz97
2020-12-24 14:46:38 +08:00
说今日最佳的,我觉得是这周最佳
pushback
2020-12-24 14:49:51 +08:00
这两端的年轻人不讲武德
xloger
2020-12-24 14:54:12 +08:00
Android 的你建议他用 Guava 算了。之前项目里是拷网上的代码有 OOM 问题,然后我自己去搜了下,发现大多中文资料不太靠谱,想用 NIO 结果遇到了一些问题,试来试去最后上 Guava 了。

参考资料:(我的参考顺序)
<http://blog.atomicer.cn/2017/05/16/%E4%BD%BF%E7%94%A8nio%E7%9A%84%E5%86%85%E5%AD%98%E6%98%A0%E5%B0%84%E8%AE%A1%E7%AE%97%E8%B6%85%E5%A4%A7%E6%96%87%E4%BB%B6%E7%9A%84MD5/>
<https://www.cnkirito.moe/file-io-best-practise/>
<https://www.jianshu.com/p/f81073adc67d>
<https://stackoverflow.com/questions/304268/getting-a-files-md5-checksum-in-java>
ReysC
2020-12-24 15:01:56 +08:00
安卓和 IOS 的应该好好查查文档,并且贴个 MD5 的正则验证:

^([a-z0-9]{32})$ 来自 https://regexlib.com/REDetails.aspx?regexp_id=698

说真的,看到 o 和 u 的时候,已经不知道是啥东西了。HEX 怎么能超过 F

附赠:

https://en.wikipedia.org/wiki/MD5

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

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

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

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

© 2021 V2EX