记一次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. create-react-app 打包后文件路径问题

    在package.json 加入 "homepage": "需要的路径",

  2. php nginx 获取header信息

    nginx中可能没有getallheaders函数 因此编写新函数 function NginxGetAllHeaders(){//获取请求头 $headers = []; foreach ($_SE ...

  3. startup ORA-00845: MEMORY_TARGET not supported on this system

    一台虚拟机跑多个实例时,由于/dev/shm空间不够导致如下报错> startupORA-00845: MEMORY_TARGET not supported on this system解决方 ...

  4. git作业

    第一部分 我的地址:https://github.com/Tohsaka-Rin-ZYJ/123/tree/master 第二部分 我对git的认识: Git是一个开源的分布式版本控制系统,用以有效. ...

  5. 最简单的dockerfile使用教程 - 创建一个支持SSL的Nginx镜像

    什么是dockerfile?简单的说就是一个文本格式的脚本文件,其内包含了一条条的指令(Instruction),每一条指令负责描述镜像的当前层(Layer)如何构建. 下面通过一个具体的例子来学习d ...

  6. Hybris ECP(Enterprise Commerce Platform)的调试

    This blog is written to demonstrate how to setup debug environment for Hybris ECP(Enterprise Commerc ...

  7. Jmeter入门18 Jmeter添加cookie的两种方式

    jmeter中添加cookie可以通过配置HTTP Cookie Manager,也可以通过HTTP Header Manager,因为cookie是放在头文件里发送的. 实例:博客园点击添加新随笔  ...

  8. Ajax系列之三:UpdatePanel

    版权声明:本文为博主原创文章,未经博主同意不得转载. https://blog.csdn.net/zhanghongjie0302/article/details/35609691           ...

  9. AFN 切换BaseUrl

    在某个特定的接口需要修改baseurl时: 直接使用kvc: [_sessionManager setValue:[NSURL URLWithString:NEW_BASE_URL] forKey:@ ...

  10. where are you going ? 反序为:going you are where

    一个反序小算法,就是首尾替换,生成新的反序后的数组