记一次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. win7 64位 安装java jdk1.8 ,修改配置环境变量

    下载jdk1.8,下载地址:http://www.wmzhe.com/soft-30118.html 安装时有两个程序,都安装在同一个目录下. win7 64位 安装java jdk1.8 ,修改配置 ...

  2. ring0 关于SSDTHook使用的绕过页面写保护的原理与实现

    原博:http://www.cnblogs.com/hongfei/archive/2013/06/18/3142162.html 为了安全起见,Windows XP及其以后的系统将一些重要的内存页设 ...

  3. Orchard Core 文档翻译 (七)Contents

    CMS Modules »Contents Contents (OrchardCore.Contents) 此模块提供内容管理服务. Liquid 您可以使用“content ”属性从liquid 视 ...

  4. Git 版本管理器学习笔记

    难点:使用 git revert <commit_id> 操作实现以退为进, git revert 不同于 git reset 它不会擦除"回退"之后的 commit_ ...

  5. JVM原理:4 运行期优化

    JVM运行期优化 Java程序在运行的期间,可能会有某个方法或者代码块的运行特别频繁时,就会把这些代码认定为“热点代码”.为了提高热点代码的执行效率,在运行时JVM会将这些代码编译成与本地平台相关的机 ...

  6. 【洛谷5292】[HNOI2019] 校园旅行(思维DP)

    点此看题面 大致题意: 给你一张无向图,每个点权值为\(0\)或\(1\),多组询问两点之间是否存在一条回文路径. 暴力\(DP\) 首先,看到\(n\)如此之小(\(n\le5000\)),便容易想 ...

  7. GOPL第三章练习题3.3 3.4代码

    练习3.3是peak展示为红色,valley展示为蓝色. 练习3.4是将svg图像打印到浏览器中. // Copyright © 2016 Alan A. A. Donovan & Brian ...

  8. sql字段为datetime,插入''的时候默认为1900年

    Microsoft SQL Server Database Engine 用两个 4 字节的整数内部存储 datetime 数据类型的值. 第一个 4 字节存储“基础日期”(即 1900 年 1 月  ...

  9. SpringBoot非官方教程 | 第十一篇:springboot集成swagger2,构建优雅的Restful API

    转载请标明出处: 原文首发于:https://www.fangzhipeng.com/springboot/2017/07/11/springboot-swagger2/ 本文出自方志朋的博客 swa ...

  10. PL/SQL语句快捷输入设置

    设置PL/SQL语句快捷输入的方法,让你成为高效率的人. 1.打开PL/SQL,输入用户并登录 2.并打开Tools->Preferences->Editor->AutoReplac ...