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

大佬们,解决一下我的疑问吧!!!!!
15710 次点击
所在节点    问与答
134 条回复
keepeye
2020-12-24 10:37:44 +08:00
@BenchWidth 怎么可能无法读取呢?
BenchWidth
2020-12-24 10:40:18 +08:00
@louiswang002 他在 csdn 找的代码只有 10 几行。。。
0x663
2020-12-24 10:44:16 +08:00
哈哈哈哈哈,没想到还会有这种问题
misaka19000
2020-12-24 10:44:20 +08:00
四五年前有幸和做 iOS 的人打过交道,那些人的水平真是菜
imdong
2020-12-24 10:45:38 +08:00
让我想起之前一个同事,让他做一个上传文件去重的功能,一个星期过去了,没动静,过去一问,搞不定,不知道咋弄...

我说用 md5 啊,你把上传的文件 md5 存数据库,每次上传检查数据库有么有记录嘛。

他说好,然后又一个星期过去了,我问咋样了...他说每次上传的文件 md5 都不一样。

我一看代码,呵:

```PHP

md5($file_name);

```

对不懂 PHP 的朋友们一个提示

`md5 ( string $str [, bool $raw_output = false ] ) : string`

我...后来他试用期没过,听说去了 OPPO,唉...
Rwing
2020-12-24 10:46:10 +08:00
md5 是标准算法。。。。各语言肯定是一样的,如果不一样,说明有人错了。。。。
BenchWidth
2020-12-24 10:48:28 +08:00
@keepeye 不知道,,我也很纳闷,我现在特别的懵逼。。。。毕竟我没写过 iOS 。昨天他解释的就是说 ISO 与安卓读取文件的方式不一样,什么什么文件拿不到之类的。我问他能到文件的二进制流嘛,他就说 iOS 啥的(不懂不懂听不懂!)
zhangxiaoming
2020-12-24 10:55:10 +08:00
跟楼主一模一样的情况,最近一个月多起来的,软件批量搞的根本防不住。当看不见...
zhangxiaoming
2020-12-24 10:55:31 +08:00
@zhangxiaoming
不好意思回错帖子了...
RayJiang9
2020-12-24 10:57:04 +08:00
如果 iOS 用的 Swift 的话,直接引入这个库,内置了多种算法 [CryptoSwift]( https://github.com/krzyzanowskim/CryptoSwift)
不过还是建议开除 iOS
BenchWidth
2020-12-24 11:03:21 +08:00
@RayJiang9 哈哈哈哈,你们好残忍
cht
2020-12-24 11:04:19 +08:00
YouLMAO
2020-12-24 11:07:21 +08:00
老板发话了,算出正确 md5 的年终奖 10 个比特币,算错了倒扣 2 个,他们工资高让他们算
Woood
2020-12-24 11:12:01 +08:00
他就说 iOS 啥的(不懂不懂听不懂!)
莫名有看孔乙己的感觉
oneisall8955
2020-12-24 11:12:23 +08:00
用脚想都知道能算一致的
yaocai321
2020-12-24 11:18:37 +08:00
建议看了下 md5 的原理, 然后手写下, 花不了一天的时间
gamexg
2020-12-24 11:22:34 +08:00
Java 的是 hex 格式,ios 的是 base64 格式,

但是谁能介绍下,安卓的是什么格式? 32 进制??
des
2020-12-24 11:32:42 +08:00
建议开除,骗鬼呢
louiswang002
2020-12-24 11:32:44 +08:00
@BenchWidth 告诉他用 NSData 读取文件,然后再用这个对象 MD5,再不行让他去 aliyunoss 里面找 OSSUtil 这个工具类,找 MD5 的方法
way2explore2
2020-12-24 11:34:21 +08:00
@gamexg 同好奇

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

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

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

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

© 2021 V2EX