|  |      1baijiahei      2020-12-24 09:47:29 +08:00 同一文件 md5 值相同 ios 端的看起来像 base64 后的 然后还有个空格 可能+号 后台接收的时候给过滤掉了 说不好 但是 ios 端的肯定是不对的 | 
|  |      2binbinyouliiii      2020-12-24 09:47:37 +08:00 你让他拿个简单字符算一下对比一下不就完了 | 
|      3ThirdFlame      2020-12-24 09:53:30 +08:00 md5 值 是 16*8=128bit      前端和 java 显示的是 hex 格式显示的。 ios 貌似是 base64 编码后显示的(不过也和 前端和 java 算的不一样) 同一个文件计算出来的 md 值( 128bit )是相同的,这是毋庸置疑的。 | 
|  |      4SjwNo1      2020-12-24 09:54:04 +08:00 啊哈 不同的编程语言 md5 算法不一样吗 坐等楼下解答 | 
|      5louiswang002      2020-12-24 09:55:07 +08:00 via iPhone 可能 iOS 端用了阿里云的工具类算出来的 md5,那个工具类里面有个函数,是 md5 之后 base64,这个值可以用于阿里云 oss 校验,可以让 iOS 的同事 review 代码 | 
|  |      6maro      2020-12-24 09:57:49 +08:00  11 一个 32 位 一个 24 位 一个干脆是 base64 | 
|      7whileFalse      2020-12-24 09:58:27 +08:00  12 都按照 linux 下的 md5sum 对齐,谁算出来和 md5sum 不一致就打回去重写 | 
|  |      8paullee      2020-12-24 10:03:48 +08:00  1 啊,你们缺少有话语权的人,这玩意儿能算出 3 个版本,那你们其他业务的坑恐怕只多不少。建议参照 7 楼的建议。 | 
|  |      9Citrus      2020-12-24 10:04:14 +08:00  70 安卓和 iso 他们和我说编程语言不一样算出来的就是不一样的 建议把说这话的人开掉。 | 
|  |      10msg7086      2020-12-24 10:08:38 +08:00 Z+L6tJUcklneku8zMPoqcw== 对应的 hex 是 67e2fab4951c9259de92ef3330fa2a73 和你算出来的不一样。 至于谁对谁错,各家 hash 工具解忧愁。 | 
|  |      11f6x      2020-12-24 10:10:56 +08:00 @whileFalse 你歧视其他操作系统. 命名 mac 和 win 下也有 md5sum | 
|      12longaiwp      2020-12-24 10:11:57 +08:00  1 你管它哪个对哪个错,就按照 Linux 下的 md5sum 来,谁不一样就谁回去研究重写。 | 
|  |      13SjwNo1      2020-12-24 10:12:59 +08:00  5 重点关照下这位 ios 同学,胡言乱语 | 
|      14kx5d62Jn1J9MjoXP      2020-12-24 10:14:08 +08:00 这两个客户端都很优秀啊, 都是自己实现 md5 算法 一般菜鸟都是网上找一段代码复制粘贴一下 | 
|      16longaiwp      2020-12-24 10:19:17 +08:00 另外你们这位做 iOS 的人,估计技术不过关,建议要他多学习。 | 
|  |      17keepeye      2020-12-24 10:30:08 +08:00 你到网上找个 swift 的标准 MD5 算法扔给他。我估计他连 md5 是什么都不知道 | 
|      18BenchWidth OP @ssynhtn 他就是网上找的计算 md5 的方式。。也不晓得哪儿找的(这就很头大了) | 
|      19BenchWidth OP @keepeye 我扔了一个 md5 标准算法,他说什么 ios 不能根据文件夹获取文件啥的,就是似乎拿不到文件的二进制流。。我也不懂 ISO 就没说什么了。 | 
|      20BenchWidth OP @Citrus 好残忍,哈哈哈 | 
|  |      21keepeye      2020-12-24 10:37:44 +08:00 @BenchWidth 怎么可能无法读取呢? | 
|      22BenchWidth OP  1 @louiswang002 他在 csdn 找的代码只有 10 几行。。。 | 
|  |      230x663      2020-12-24 10:44:16 +08:00 哈哈哈哈哈,没想到还会有这种问题 | 
|  |      24misaka19000      2020-12-24 10:44:20 +08:00 四五年前有幸和做 iOS 的人打过交道,那些人的水平真是菜 | 
|  |      25imdong      2020-12-24 10:45:38 +08:00  7 让我想起之前一个同事,让他做一个上传文件去重的功能,一个星期过去了,没动静,过去一问,搞不定,不知道咋弄... 我说用 md5 啊,你把上传的文件 md5 存数据库,每次上传检查数据库有么有记录嘛。 他说好,然后又一个星期过去了,我问咋样了...他说每次上传的文件 md5 都不一样。 我一看代码,呵: ```PHP md5($file_name); ``` 对不懂 PHP 的朋友们一个提示 `md5 ( string $str [, bool $raw_output = false ] ) : string` 我...后来他试用期没过,听说去了 OPPO,唉... | 
|      26Rwing      2020-12-24 10:46:10 +08:00 md5 是标准算法。。。。各语言肯定是一样的,如果不一样,说明有人错了。。。。 | 
|      27BenchWidth OP @keepeye 不知道,,我也很纳闷,我现在特别的懵逼。。。。毕竟我没写过 iOS 。昨天他解释的就是说 ISO 与安卓读取文件的方式不一样,什么什么文件拿不到之类的。我问他能到文件的二进制流嘛,他就说 iOS 啥的(不懂不懂听不懂!) | 
|  |      28zhangxiaoming      2020-12-24 10:55:10 +08:00 跟楼主一模一样的情况,最近一个月多起来的,软件批量搞的根本防不住。当看不见... | 
|  |      29zhangxiaoming      2020-12-24 10:55:31 +08:00 @zhangxiaoming  不好意思回错帖子了... | 
|  |      30RayJiang9      2020-12-24 10:57:04 +08:00 如果 iOS 用的 Swift 的话,直接引入这个库,内置了多种算法 [CryptoSwift]( https://github.com/krzyzanowskim/CryptoSwift) 不过还是建议开除 iOS | 
|      31BenchWidth OP @RayJiang9 哈哈哈哈,你们好残忍 | 
|      32cht      2020-12-24 11:04:19 +08:00 | 
|      33YouLMAO      2020-12-24 11:07:21 +08:00 via Android 老板发话了,算出正确 md5 的年终奖 10 个比特币,算错了倒扣 2 个,他们工资高让他们算 | 
|  |      34Woood      2020-12-24 11:12:01 +08:00 他就说 iOS 啥的(不懂不懂听不懂!) 莫名有看孔乙己的感觉 | 
|  |      35itechify PRO 用脚想都知道能算一致的 | 
|      36ClaudeCode      2020-12-24 11:18:37 +08:00 建议看了下 md5 的原理,  然后手写下, 花不了一天的时间 | 
|  |      37gamexg      2020-12-24 11:22:34 +08:00 Java 的是 hex 格式,ios 的是 base64 格式, 但是谁能介绍下,安卓的是什么格式? 32 进制?? | 
|  |      38des      2020-12-24 11:32:42 +08:00 建议开除,骗鬼呢 | 
|      39louiswang002      2020-12-24 11:32:44 +08:00 via iPhone @BenchWidth 告诉他用 NSData 读取文件,然后再用这个对象 MD5,再不行让他去 aliyunoss 里面找 OSSUtil 这个工具类,找 MD5 的方法 | 
|  |      40way2explore2      2020-12-24 11:34:21 +08:00 @gamexg 同好奇 | 
|  |      41cornetCat      2020-12-24 11:36:53 +08:00 建议开除,不然后续的坑你会吐血 | 
|      42BenchWidth OP  2 @gamexg 我刚看了看他的代码似乎把 16 进制转换成了 32 进,我重新找了 个文件。 我算出来是 bfc918bf80386fa7f2784807c07860d8 安卓算出来是 5vp4cbv01odujv4u280v07go6o 他说他用的是安卓 sdk 的方法来获取的,不知道是不是被自动转成 32 进制了 | 
|      43mxT52CRuqR6o5      2020-12-24 11:44:01 +08:00 有啥好疑问的,那两位水平不行 你看看他们是培训机构出来的还是科班出来的 | 
|      44BenchWidth OP @louiswang002 好的 | 
|  |      45hatebugs      2020-12-24 11:51:58 +08:00 via Android 这个水平,, | 
|  |      46vanxy      2020-12-24 11:53:09 +08:00 | 
|  |      47icyalala      2020-12-24 11:55:42 +08:00  13 @Woood  这 iOS 童鞋编译不报错了,涨红的脸色渐渐复了原,他人便又问道,“童鞋,你当真认会做 iOS ?” 他看着问他的人,显出不屑置辩的神气。他们便接着说道,“你怎的连 md5 都算不对呢?”他立刻显出颓唐不安模样,脸上笼上了一层灰色,嘴里说些话;这回可是全是 block runtime 之类,一些不懂了。在这时候,众人也都哄笑起来:工位前后充满了快活的空气。 | 
|  |      48FreeEx      2020-12-24 11:58:11 +08:00 via iPhone 我的天,建议面试官辞职谢罪 | 
|  |      49gefranks      2020-12-24 11:59:51 +08:00 算不对还可以忍, 但是说编程语言不一样算出来的就是不一样的,建议开除。 | 
|  |      50anteros      2020-12-24 12:08:36 +08:00 这水平能找到工作,是不是应该反省一下公司的招聘录用流程? | 
|      51superrichman      2020-12-24 12:17:04 +08:00 via iPhone 安卓的可能是把 hmacmd5 当成 md5 用了 | 
|  |      52Jackeriss      2020-12-24 12:20:32 +08:00 via iPhone 今日最佳 | 
|  |      53zszhere      2020-12-24 12:32:23 +08:00 via iPhone 先统一 tohex()把格式整一致了再说 如果还不一致就找个小文件做二进制的 bindiff | 
|      54zqx      2020-12-24 12:33:18 +08:00 via Android md5 是一个给资源生成唯一标识的规则,不是具体算法吧,指定同一种算法,不同平台的结果肯定是一样的 | 
|      55dogfood      2020-12-24 12:44:26 +08:00 牛逼 class | 
|      56rigortek      2020-12-24 12:45:11 +08:00 via iPhone md5 都能有争议,还和语言有关?醉了! 命令行一条 md5sum 结果就是三端看齐的标准 iOS 绝对水货一个 | 
|      57sampeng      2020-12-24 12:52:41 +08:00 via iPhone 今日最佳 我说这样的留着过年? | 
|  |      58richChou      2020-12-24 13:06:19 +08:00 想起之前公司有个开发跟我说不同语言 Base64 Encode 之后的值不一样。 | 
|  |      59360511404      2020-12-24 13:17:55 +08:00 单看 iOS 是不是跟你的结果一致,这个重要吗 能得出这样的 md5 值的 iOS,你还留着过年吗 他自己都不看一下自己的值,他不知道怎么看都铁定不是 md5 吗 | 
|      611s1s      2020-12-24 13:38:03 +08:00 不敢看不敢看 | 
|      62djs      2020-12-24 13:39:04 +08:00 直接好家伙,这辆端开发有毒 | 
|      63glennv2ex      2020-12-24 13:41:02 +08:00 前端,java 后台看起来没问题   安卓的 25 位肯定不对 ios 的更离谱了 | 
|      64glennv2ex      2020-12-24 13:42:13 +08:00 欺负你这个老后端😄 | 
|      65BenchWidth OP @glennv2ex 哭了哭了,太难了 | 
|  |      66guibin1989      2020-12-24 13:45:22 +08:00 iOS 程序员风评被害,建议开除。 | 
|      67longaiwp      2020-12-24 13:52:11 +08:00 @richChou 确实会有,哪怕都是 Jawa,Android 和 Jawa 原生的 Base64 也会有不同,内部的规则问题。但是这本质上不是哪个语言不能得出哪个样子的东西,只要你指定要哪样的,一定能搞出来的。 | 
|  |      68cocowind      2020-12-24 13:55:30 +08:00 0.0 不用标准库自己写,去百度 CV? | 
|  |      69SjwNo1      2020-12-24 13:55:45 +08:00 贵司的客户端能用吗哈哈 | 
|      70heliotrope      2020-12-24 14:04:27 +08:00 @richChou 确实会不一样呀 字符编码 填充方式 都有可能不一样 | 
|      71zjddp      2020-12-24 14:13:32 +08:00 提问:这三人至少有几个人有问题 | 
|  |      72huayumo      2020-12-24 14:16:59 +08:00 哈哈哈,ios 的要笑死了 | 
|      73local      2020-12-24 14:25:55 +08:00 这不至少 2 有问题吗 | 
|      74FallenTy      2020-12-24 14:27:50 +08:00 建议换个 ios 。 | 
|      75local      2020-12-24 14:31:04 +08:00 iOS 的看格式应该是 md5 后,又 base64 编码的结果 | 
|  |      76sarices      2020-12-24 14:32:08 +08:00 md5 不是一般都是把结果生成 32 位十六进制数字吗,ios 和安卓是什么鬼算法 | 
|      77dddz97      2020-12-24 14:46:38 +08:00 说今日最佳的,我觉得是这周最佳 | 
|  |      78pushback      2020-12-24 14:49:51 +08:00 这两端的年轻人不讲武德 | 
|      79xloger      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> | 
|      80ReysC      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 | 
|  |      81locoz      2020-12-24 15:09:16 +08:00 via Android “主要是安卓和 ios 他们和我说编程语言不一样算出来的就是不一样的,而且 ios 他说没法算出我这种 md5 数值。” 很真实哈哈哈哈哈,见过好几个做客户端开发的都有类似情况,主要可能是理解不了,因为和做客户端的那些东西不是一个逻辑。 | 
|  |      82Elethom      2020-12-24 15:20:11 +08:00  2 我来唱个反调,Android 和 iOS 端提供的 md5 都真的是 md5,不过 Android 是 32 进制的,iOS 的是 base64 encode 过的 raw data 。 但是依然建议: - 开除这两位,不会转换标准 hex 字串留着过年? - 开除所有楼上说不是 md5 的,真的太鸡巴菜了 | 
|  |      83JDog      2020-12-24 15:20:16 +08:00 我曾经一位 iOS 开发同事...... 我: “传参比较大,放 body 里吧” 研究了半天以后.... 同事: “iOS 这边好像没法把参数放 body 里,就 URL 传参吧” 我特么惊了,敢情 OC 实现的 http 协议没 body | 
|  |      84a719031256      2020-12-24 15:23:18 +08:00 把 ios 开发打一顿就对了,这明显是搞事嘛 | 
|  |      85Elethom      2020-12-24 15:26:08 +08:00 via iPhone @locoz  iOS 自己的 crypto 库出来就是 raw data,直接输出字串就是 encode 过的,和语言没关系,和输出格式有关系。当然不会输出 hex 字串就是水平有问题,和「和做客户端的那些东西不是一个逻辑」没关系。 | 
|  |      86liman      2020-12-24 15:26:58 +08:00 牛逼!耳机可完全被认为了 | 
|  |      89CatTom      2020-12-24 15:52:35 +08:00 亲,这边建议您先去暴打一顿当初的面试官哟~ | 
|  |      90zpf124      2020-12-24 16:04:37 +08:00 @zqx hash 哈希摘要算法,是一个笼统的算法规则,而 md5,sha1 sha256 都是具体的哈希算法实现,是已经规定好了具体算法思路的,不论什么平台什么工具算出来的 md5 值都应该是一样的。 | 
|  |      91zckevin      2020-12-24 16:08:06 +08:00 啊这 | 
|  |      92fanjianhang      2020-12-24 16:10:25 +08:00 好家伙颠覆了 | 
|  |      94shawnsh      2020-12-24 16:11:46 +08:00 via Android 水的一比,那大家换个 sha3 来校验吧,狗头 | 
|      96BenchWidth OP @xloger 好的,谢谢大佬!我发给他看看 | 
|  |      97devcat      2020-12-24 16:26:33 +08:00 巧了,我也遇到同样的问题,就在前几天 | 
|      98BenchWidth OP @lovecy 刚刚找到问题了,文件比较小的他计算出来的值转换为 16 进制刚好是可以和我的 md5 对上。大文件他计算出来的就有问题了, | 
|  |      99JKeita      2020-12-24 16:42:29 +08:00 ios 那个是 MD5 ?你在搞笑? | 
|  |      100JKeita      2020-12-24 16:43:14 +08:00 MD5 是规范好吧,不同语言算出来的都应该一样。 |