32位md5解密_GoLang:有趣的密码学之MD5

本文详细介绍了MD5算法,包括MD家族的历史、MD5的基本原理和步骤,如数据补齐、初始化MD缓冲区、处理消息组和输出。MD5由Ronald Rivest提出,1991年的改进版,尽管在2004年被证明存在碰撞,但至今仍被广泛使用。文中还探讨了MD5的填充规则、MD缓冲区初始化和消息块的处理过程。
摘要由CSDN通过智能技术生成

MD家族

MD是Message Digest的缩写,其家族目前成员有MD2MD4MD5MD6,这些算法都出自一个人:Ronald Rivest,这个人就是RSA的R!这些算法(MD2/MD4/MD5/MD6)别公布于1989、1990、1992和2008年。笔者在准备学习MD算法之前,就一直对这么多序号感到困惑:哎,是否存在MD1MD3呢?各个算法之间的关系是怎么样的?

然后发现居然也有人好奇“MD1和MD3算法是否存在”的问题:Is the first version of the Message-Digest algorithm by Ronald Rivest publically available?。从回答来看,可以认为MD1和MD3存在的,但是没有公开发表

Bart Preneel in his 1993 PhD thesis writes "R. Rivest of RSA Data Security Inc. has designed a series of hash functions, that were named MD for “message digest” followed by a number. MD1 is a proprietary algorithm. MD2 [175] was suggested in 1990, and was recommended to replace BMAC [193]. MD3 was never published, and it seems to have been abandoned by its designer." Since I suppose Bart as an insider should be well informed, I suppose that the algorithm exists but has never been made public.

那么,接着让我们来看看这些已经和我们见面的MD成员们,都具体是什么:

  • MD6:Rivest在Crypto2008上提出的,该算法有MD6-128、MD6-256和MD6-512三种。我们可以发现这个算法目前并不比MD5普及,原因可以参考What happened to MD6?
  • MD5:Rivest 于1991年对MD4的改进版本,输出是一串定长128bits的摘要/密文。该算法在2004年的时候被山东大学的王小云院士证明存在强碰撞可能,网上很多说法是”被破解“了,这种说法不严谨:王小云院士只是证明MD5不具有抗碰撞性,而不是反解了MD5!参见《MD5 和SHA-1的强抗碰撞性不是早已被王小云教授攻破了吗,为什么现在仍然在使用?》高赞回答。
  • MD4:Rivest 在 1990 年设计提出的,输出是一串定长128bits的摘要/密文。
  • MD2:Rivest在1989年提出的,很早就不再使用了。

MD5算法

本文重点介绍MD5算法,推荐阅读Rivest的MD5原稿:RFC1321-The MD5 Message-Digest Algorithm。下面分步骤来介绍MD5的具体做法。

1.1 数据补齐/填充(Padding)

MD5也可以认为是基于block的算法,它要求每次处理的数据长度为512bits,但是实际中要处理的明文长度并不一定是512的整数倍,怎么办呢?参考AES的做法,做数据补齐/填充(Padding)。假设原始明文消息的长度为K,MD5的Padding可以细分为2个子步骤:

  1. 附加填充位(Append Padding Bits):从原始明文消息的K位之后补100...一直到512-64=448位,填充位的规则是:只有第一个bit是1,之后都是0。这里有个问题:如果K%512正巧等于448怎么办呢?再者,如果K%512在[448,512(模运算得到的是0)]之间怎么办呢?答案:Append Padding Bits要求至少填充1位,如果长度正好是448,那么就索性再增加一个block,填充512bits;如果模超过448,也再增加一个block,填充512-(K%512-448);同理,如果模不到448,就填充448-K%512即可。
  2. 附加长度(Append Length):这个时候,最后一个block只剩下64bits需要填充了,其内容是原始明文的长度。试想,64bits可以表示最长的数据将近2^30GB的数据了!如果
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值