关于md5:一行MD5居然让小伙伴都回不了家

作者:京东批发 付伟 1. 前言大家好,当你点开这篇文章的时候兴许心想是哪个 XX 小编混到这里,先不要焦急扔臭鸡蛋,本文是一篇规范(正经)的问题复盘文章。好了,一行MD5竟然让小伙伴下不了班,到底是什么问题呢,让咱们一起来看看吧。 2. 注释2.1 需要是什么这里不再介绍具体的业务。简而言之,有两个接口(查问、确认)对前端页面提供服务。 查问接口返回的数据依赖于本地数据与内部接口计算后的后果,也就是页面展现的是数据快照。确认接口是依照页面的展现后果申请内部接口。 思考到用户关上展现页面时的数据与提交操作可能距离很久,理论申请时后果已发生变化,而这种操作会影响业务后果。因而在提交时会进行一次 check,如果发现数据发生变化须要提醒页面进行刷新。 为了不便大家了解,我简略的画了个图,毕竟下面太啰嗦了。 查问接口 确认接口 尽管这个图有点粗率,然而置信看到这里的小伙伴(默认都是聪慧的)都对需要了然于胸了。 2.2 我怎么搞得掰扯了半天,咱们的配角MD5还没有出场,别着急风雨总在彩虹后。 能够看出,这里须要前端将查问接口的返回值从新组装作为确认接口的入参。而后端须要再次走数据聚合的逻辑与前端传过来的业务值进行比拟,如果不匹配则提醒页面须要刷新。 所有看起来都牵强附会,那么小编遇到了什么问题呢? 简略来说有两点: 前端同学示意值不好传,因为这个页面比较复杂,具体起因小编也没深究,可能是被糊弄了。后端同学(也就是小编)发现,这样查问接口和确认接口耦合很重大,如果确认接口须要新的入参,那么就须要改变查问接口。随着查问接口逻辑越来越简单,确认接口的一个入参就须要一层一层的传过来。很不敌对。呵呵,机智的小编眉头一皱;计上心来,便想到了了MD5,看看百度百科怎么说 MD5 信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被宽泛应用的明码散列函数,能够产生出一个 128 位(16 字节)的散列值(hash value),用于确保信息传输残缺统一。一图胜千言 在工程,它差不多就是这么用。 String md5= Md5Utils.get(String source);可能有聪慧的小伙伴会说了,这是散列函数存在哈希碰撞,不同的字符串也有可能生成雷同的哈希值。 是的没错,然而在小编的业务场景中,这种呈现的概率微不足道,忽略不计,解释权归小编所有。 那么具体怎么做的呢,还是看图谈话: 革新后的查问接口 革新后的确认接口 咱们须要对查问接口返回的业务集要害属性进行组合哈希,这样能够生成数据快照值。确认接口无需再传入业务汇合,只须要传入数据快照值,后端进行比照即可晓得是否产生变更。 一切都是那么的美妙,接下来就到了动人心魄的编码环节。话不多说,小编的我的项目中引入了hutool包,什么你不晓得糊涂包? Hutool 是一个小而全的 Java 工具类库,通过静态方法封装,升高相干 API 的学习老本,进步工作效率,使 Java 领有函数式语言般的优雅,让 Java 语言也能够“甜甜的”。Hutool 中的工具办法来自每个用户的精雕细琢,它涵盖了 Java 开发底层代码中的方方面面,它既是大型项目开发中解决小问题的利器,也是小型我的项目中的效率担当;真不错,果然是效率担当,一行代码就搞定了。 /** * 生成数据哈希 */ private String generateSnapShotHash(AcceptListQueryWrapResultDTO wrapResultDTO) { StringBuilder builder = new StringBuilder(); for (AcceptListQueryResultDTO item : wrapResultDTO.getAllList()) { builder.append(item.getQuotationId()).append(item.getOperateType()).append(item.getPriceTypeCN()); } return MD5.create().digestHex16(builder.toString()); } ...

March 15, 2023 · 1 min · jiezi

关于md5:计算一个文件的-md5-值很费时间吗

有一个 1.2 GB 是视频文件 (svddb_sdk) ╭─pon@admini ~/code/vobile/svddb_sdk ‹master*› ╰─➤ ls -alh /home/pon/Downloads/svddb/meta/video_rename/1d0143aa-1d38-11ed-85a5-42010a800101.mp4-rw-rw-r-- 1 pon pon 1.2G Dec 6 11:17 /home/pon/Downloads/svddb/meta/video_rename/1d0143aa-1d38-11ed-85a5-42010a800101.mp4让咱们来看看应用 md5sum 计算该文件的 md5 值须要多久! ╰─➤ time md5sum /home/pon/Downloads/svddb/meta/video_rename/1d0143aa-1d38-11ed-85a5-42010a800101.mp46d8572d156db4b180a49d03f6bbf0c1a /home/pon/Downloads/svddb/meta/video_rename/1d0143aa-1d38-11ed-85a5-42010a800101.mp4md5sum 3.60s user 0.48s system 99% cpu 4.084 total花了 3.6s 哦

December 20, 2022 · 1 min · jiezi

关于md5:信息安全数据加密实战对项目中数据使用MD5算法进行加密

MD5加密算法的实现原理Java中MD5加密算法的实现: public class MD5 { // 全局数组 private final static String[] strDigit = {"1", "2", "3", "4", "5", "6", "7", "8", "9", "a", "b", "c", "d", "e", "f"}; public class MD5 { } // 返回模式为数字和字符串 private static String byteToArrayString(byte bByte) { int iRet = bByte; if (iRet < 0) { iRet += 256; } int iD1 = iRet / 16; int iD2 = iRet % 16; return strDigits[iD1] + strDigits[iD2]; } // 返回模式只为数字 private static String byteToNum(byte bByte) { int iRet = bByte; if (iRet < 0) { iRet += 256; } return String.valueOf(iRet); } // 将字节数组转换成为16进制的字符串 private static String byteToString(byte[] bByte) { StringBuffer stringBuffer = new StringBuffer(); for (int i; i < bByte.length; i++) { StringBuffer.append(byteToArrayString(bByte[i])); } return stringBuffer.toString(); } // 获取MD5值 public static String GetMD5Code(String strObj) { String resultString = null; try { resultString = new String(); MessageDigest md5 = MessageDigest.getInstance("MD5"); // md5.digest() - 返回值为寄存Hash值后果的byte数组 resultString = byteToString(md5.digest(strObj.getBytes())); } catch (NoSuchAlgorithmException e) { e.printStackTrace(); } return resultString; }} MessageDigest类MessageDigest类: ...

February 10, 2022 · 3 min · jiezi