记一次MD5妙用

最近项目组中在做历史记录的改造工作,主持讨论了多次,但每次讨论完都觉的很完美了,但实际在写这部分逻辑的时候还是会发现一些问题出来,很难受,反反复复的暴露智商是硬伤,人艰不拆,暂先不扯这些真相了。介绍下实际操作场景,我们的项目是分设计端和运行端的,就是设计端设计的内容保存在数据文件中,运行端去解析该文件,展示设计的内容,其中历史记录部分就是其中一项功能,该功能包括采集外部设备的数据,以及使用表格和曲线来展示数据。但这里有一个要求就是,同一个工程的历史数据文件不能每次下载就新建这个历史数据文件,必须要判断有无更改了历史记录配置,如果有更改则可以重建,否则就不能新建去存储,第一次讨论时就已经考虑到这一点了,确定了是由运行端去比较是否有更改。运行端人员写了一下,发现这个比较很麻烦,因为运行端是在一个嵌入式设备上运行的,内存,硬盘这些都很小,cpu处理也很慢,不仅麻烦,而且运行处理速度也很慢,提出由设计端人员给个标志位,这就是第二次讨论的时候提到的,设计端给出的方案是每次有编辑历史记录部分就置位某个值,下载后,就复位该值。这对于设计端来说也简单,就定了。后面又发现,咱这个设计的数据文件是可以下载到多台设备上的,每次下载完就复位的话,下载到另一台的时候不就没有这个标志位了嘛,这不行啊,同一工程导致两种运行端解析方式,这是不可接受的。然后进行了第三次讨论,有提到说使用历史记录修改版本来区分开来,这是一个感觉还不错的方式。下载到设备上后,设备用当前的那个工程的历史记录版本号与最新的下载的工程中的历史记录版本号进行比对,如果不一样就可以新建,否则不新建,可接着进行记录。这个方式是解决了之前那个问题,但又发现新的问题来,就是设计端更改了历史记录配置后保存,然后又更改历史记录配置,使之和原来的设置是一样的,这时候版本是有更新的,但实际配置没有变化,如果这种情况下载进去,历史数据又新建,显然是不合适的。忽然灵光一闪,这个场景熟悉,判断前后设置是否有修改,可以使用md5计算一下配置信息存在某个地方,下载到设备上后,设备对这个md5值和原来配置的那个记录进行比较,如果相同,则无需新建,否则新建,这个处理方式就避免了更改了配置,又将配置还原为原来配置的问题,这里利用了md5一对一的特点,巧妙的解决了这个问题。但愿这次的讨论能够周全了。2018-09-27 18:21:00

最后附上C#中对MD5的计算方法

public static string GetMD5String(string str)
{
MD5 md5 = MD5.Create();
byte[] data = Encoding.UTF8.GetBytes(str);
byte[] data2 = md5.ComputeHash(data);
return GetByteToString(data2);
}
public static string GetByteToString(byte[] data)
{
StringBuilder sb = new StringBuilder();
for(int i = 0; i < data.Length; i++)
{
sb.Append(data[i].ToString("x2"));
}
return sb.ToString();
}

记一次MD5妙用的更多相关文章

  1. js和java MD5加密

    项目中用到js MD5加密和后台java MD5加密,刚开始加密后两个不一致,网上找了好久终于找到一个啦,记下来: md5.js /* * A JavaScript implementation of ...

  2. WC2019 填坑记

    2019年1月8日 1.Luogu P2147 [SDOI2008]洞穴勘测 (LCT模板题&LCT学习) 2019年1月9日 2.LuoguP3203 [HNOI2010]弹飞绵羊  (LC ...

  3. 记一次加密算法MD5

    通过MessageDigest可以获取到16个字节数组: MessageDigest md5 = MessageDigest.getInstance("MD5"); byte[] ...

  4. 记一次npapi插件无窗口(windowless )化下的妙巧思路然后解决问题的超爽体验过程

     1:问题 集成第三方的ocx控件,用来做pdf显示和签名.如果用窗口化插件做,很简单,加载ocx到窗口中,再显示到网页即可.但这样有个缺点.就是这个窗口会浮动在网页元素的上面,导致遮挡住网页元素.比 ...

  5. 【java基础】妙记进制转换

    一.二进制与十进制 1.正整数十进制转二进制 口诀:除二取余,倒序排列 解释:将一个十进制数除以二,得到的商再除以二,依此类推直到商等于一或零时为止,倒取将除得的余数,即换算为二进制数的结果 例如把5 ...

  6. java单向加密算法小结(2)--MD5哈希算法

    上一篇文章整理了Base64算法的相关知识,严格来说,Base64只能算是一种编码方式而非加密算法,这一篇要说的MD5,其实也不算是加密算法,而是一种哈希算法,即将目标文本转化为固定长度,不可逆的字符 ...

  7. 北京培训记day2

    后缀三姐妹 P.S.后缀大家族关系:后缀自动机fail指针=后缀树,后缀树前序遍历=后缀数组 一.后缀数组:orz罗穗骞集训队论文 给每个后缀按字典序排序 rank[]表示从i开始的后缀排名多少 sa ...

  8. APK瘦身记,如何实现高达53%的压缩效果

    作者:非戈@阿里移动安全 1.我是怎么思考这件事情的 APK是Android系统安装包的文件格式,关于这个话题其实是一个老生常谈的题目,不论是公司内部,还是外部网络,前人前辈已经总结出很多方法和规律. ...

  9. MD5实现32位加密

    好记性不如烂笔头,随手记记 附代码 public static void Main(string[] args) { Console.WriteLine("长度为" + UseMd ...

随机推荐

  1. Python 列表(list)操作

    创建列表 sample_list = ['a',1,('a','b')] Python 列表操作 sample_list = ['a','b',0,1,3] 得到列表中的某一个值 value_star ...

  2. I want to be a Great Web Front-end Developer

    有时觉得特别的浮躁,可能是每天春运般的挤地铁,随处可见因为一点小磕小蹭吹胡子瞪眼睛的人,可能是身边的人貌似一下子都好有钱,买房买车或者买第N套房. 很想静下来心寻找到自己inner pace,但是忽然 ...

  3. 【Spring实战】—— 2 构造注入

    本文讲解了构造注入以及spring的基本使用方式,通过一个杂技演员的例子,讲述了依赖注入属性或者对象的使用方法. 如果想要使用spring来实现依赖注入,需要几个重要的步骤: 1 定义主要的类和需要分 ...

  4. 为什么使用中间件下载时总是收到警告消息Object is in status Wait

    在使用中间件从ERP下载对象时,正常情况下应该看到如下提示消息: 然而有时遇到的是黄色的警告消息:Object is in status Wait. 如何自己排错呢?在函数SMOF0_INIT_DNL ...

  5. 【转】学习jar命令 创建和解压jar文件包

    java编程中每天都用不少jar文件,项目开发中不停地导包,在忙完了一天的工作,放下那些复杂的业务实现,不仅想问这些jar包怎么生成的,jar包有哪些独特的地方等等. 原来这些经常见到的jar包是ja ...

  6. git报错error: src refspec refs/heads/master does not match any.

    $ git pusherror: src refspec refs/heads/master does not match any.error: failed to push some refs 出错 ...

  7. 【luogu P3369 普通平衡树(Treap/SBT)】 模板 Splay

    题目链接:https://www.luogu.org/problemnew/show/P3369 #include <cstdio> #include <algorithm> ...

  8. 消息中间件JMS(一)

    1.JMS入门 1.1消息中间件 模块之间的依赖也称之为耦合.而耦合越多,之后的维护工作就越困难.那么如果改善系统模块调用关系.减少模块之间的耦合呢?我们接下来就介绍一种解决方案----消息中间件. ...

  9. centos7下javac:未找到命令的问题

    在linux下编译java程序,执行javac编译生成class文件时,在centos7终端输入如,javac hello.java    会提示未找到指令,但用java -verison测试环境变量 ...

  10. 下载YouTube视频的网站和工具

    1.界面友好,可选择的清晰度较多(我个人用这个比较多) http://en.savefrom.net/ 2.几乎可以解析到所有的清晰度 http://www.clipconverter.cc 3.可选 ...