首页 > 编程语言 >1582_C代码实现的快速、可移植MD5信息摘要算法

1582_C代码实现的快速、可移植MD5信息摘要算法

时间:2023-01-22 14:32:49浏览次数:71  
标签:十六进制 结果 1582 可移植 接口 算法 测试 MD5


全部学习汇总: ​​GreyZhang/c_units: A small piece of code which can be reuse anywhere, I call it a unit. This is a collection of unit in C language! Ok, yes, it would be my toolbox. (github.com)​

工作之中,同事用到了MD5信息摘要算法,但是一直没搞定。几个人找我咨询,我也没接触过。简单拿测试的例子试了一下linux shell中带有的md5sum,发现计算的结果并不一致,看起来这个并不是我之前接触的MD5算法。但是,受益于互联网的便捷,我简单搜索很快就锁定了一个似乎可以尝试的目标。这是一个开源的MD5算法实现,正好是面向我需要处理的问题。相关的链接:​​A portable, fast, and free implementation of the MD5 Message-Digest Algorithm (RFC 1321) [Openwall Community Wiki]​

比较有意思的是,这个网页的实现居然是一个WiKi,而我最近刚好帮公司搭建了一个WiKi系统,突然间觉得又多了积分亲切。

对代码进行了一个测试,想看看输入的格式应该按照什么来处理。我分别按照字符串、十六进制单数值、十六进制的无符号8bit、无符号的表征的十六进制字符数值等几种方式作为输入来进行测试。以下是我所进行的测试:

1582_C代码实现的快速、可移植MD5信息摘要算法_嵌入式

测试比较顺利,很快就撞出来了跟我预期一致的结果。这个算法之前给我的测试的例子,输入的其实是每2个字符组合为一个十六进制的数值。先看一下运行的结果,之后再看看每一个接口的使用。

1582_C代码实现的快速、可移植MD5信息摘要算法_嵌入式_02

以上是我测试出来的结果。

接下来看看这个模块的相关接口,其实还是很简单的。

1582_C代码实现的快速、可移植MD5信息摘要算法_TC275_03

首先是一个初始化,用到接口MD5_Init(),这个初始化会初始化掉计算所用到的一个结构体。我这里定义为了一个全局变量,其实这个也不见得必须用全局变量。

1582_C代码实现的快速、可移植MD5信息摘要算法_TC275_04

接下来是实际的MD5信息摘要计算,计算完成后提取结果,计算的结果会存储到第一个指针参数所指向的位置。MD5_Update()是用于MD5计算的主要的接口函数,而MD5_Final()接口则是把已经存储到了前面定义的结构体中的计算结果组合输出出来。

接口非常清晰简单,最后的结果是一个十六进制的存储结果,这个其实也是我测试出来的。按照字符串、字符以及正确的结果等几种可能的方式都做了测试,最终找到的一个正确的解释方式。

以后,不知道这个小工具是否还会不断从工具箱里面拿出来使用。但是感觉上这个有点之前收集到的CRC的感觉,值得收纳。

标签:十六进制,结果,1582,可移植,接口,算法,测试,MD5
From: https://blog.51cto.com/greyzhang/6021493

相关文章

  • sql md5
    sqlmd5最简单例子selectMD5('0j46o1112665989')asmdd有时候需要将多个字符串拼接selectMD5(CONCAT('0j46o','1112665989'))行mdd51gU89+XO93zUEg4w39N7U0A==将MD5的......
  • Windows7复制大文件后MD5不正确的问题之解决一法
       我的工作笔记本型号是DELLD630,安装的是2条1GDDR2-667内存,Win7系统。前些天换了2条DDR2KingstonPC2-6400(400MHz)内存。在之前我其实已经知晓该本子最大支持内......
  • MD5简述及常见解密网址推荐
    什么是md5MD5(Message-DigestAlgorithm5)(信息-摘要算法5),一种被广泛使用的[密码散列函数](https://baike.baidu.com/item/密码散列函数/14937715?fromModule=lemma_in......
  • Oracle数据库软件包MD5校验HASH值汇总
    ################################Linux_x64_11gR211.2.0.4################################p13390677_112040_Linux-x86-64_1of7.zip大小:1395582860字节 MD5:......
  • RSA非对称加密和MD5不可逆加密代码示例
    加密算法可以分为三大类:对称加密算法:DES 非对称加密算法: RSAHash算法: MD5登陆密码加密流程:web端用公钥加密密码,server端用私钥解码,将解出的明文用MD5加密......
  • windows 批处理脚本 计算md5
    @echooffcolor0A:start::clsecho请输入文件路径:set/psrcfile=ifnotexist"%srcfile%"echo文件不存在,请重新输入!!&goto:startifexist"%srcfile%\.\"......
  • Golang实现16/32位MD5加密
    转自:Golang实现16/32位MD5加密packagemainimport( "crypto/md5" "encoding/hex" "fmt")//返回一个32位md5加密后的字符串funcGetMD5Encode(datastring)stri......
  • Md5加密
    引用newget包   添加静态帮助类publicstaticstringGetMD5Hash(stringstr){//就是比string往后一直加要好的优化容器StringB......
  • sqlserver MD5加密
    一、示例及分析例如对人力资源表(hrmresource)的身份证号(certificatenum)进行md5加密对于mysql数据库直接查询md5函数即可,但sqlServer没有内置md5函数,处理起来相......
  • MD5安全吗,MD5加密有哪些问题,如何提高安全性?
    MD5是一种散列函数,在计算机安全领域得到广泛应用。然而,MD5国际密码算法被王小云研究团队证实并不安全,因为MD5本身存在一些缺点,这些缺点导致了MD5并不是很安全,可能会带来信息......