概述

MD5以512位分组来处理输入的信息,且每一个分组又被划分为16个32位子分组,经过一系列处理后,算法的输出由4个32位分组组成,将这4个32位分组级联以后将生成一个128位的散列值。

步骤

1.首先需要对信息进行填充

使得其位长度(Bits Length)对512取余的结果等于448。因此,信息的位长度将被扩展至N*512+448,即N*64+56个字节(Bytes)。

填充方法: 在信息后面天聪一个1和无数个0,直到满足长度要求。然后再在后面附加上一个以64位二进制表示的天充钱信息长度。现在的信息字节长度=N*512+4448+64=(N+1)*512,即恰好是512的整数倍(填充成这样是为了后面的信息处理)。

2.设置链接变量(Chaining Variable)

MD5中有四个32位的值被称作链接变量的整数参数,分别是:A=0x01234567,B=0x89abcdef,C=0xfedcba98,D=0x76543210。

3.进入算法的四轮循环运算

当设置号四个链接变量后,就开始进入算法的四轮循环。循环的次数是512位信息分组的组数。

将上面四个链接变量复制到另外四个变量中A→a,B→b,C→c,D→d。

主循环有四轮(MD4只有3轮),每轮循环都很相似。第一轮进行16次操作。每次操作对abcd中的三个做一次非线性函数运算,然后将所得的结果一次加上第四个变量、文本的一个子分组和一个常熟。再将所得结果享有宣化移动一个不定的数值,并加上adcd其中的一个。最后用该结果取代abcd其中的一个。

将每一512字节细分成16个小组,每个小组64位(8个字节);

四个非线性函数

F(X,Y,Z)=(X&Y)|((~X)&Z)

G(X,Y,Z)=(X&Z)|(Y&(~Z))

H(X,Y,Z)=X^Y^Z

I(X,Y,Z)=Y^(X|(~Z))

设Mj表示消息的第j个子分组(从0到15),<<

FF(a,b,c,d,Mj,s,ti)表示a=b+((a+F(b,c,d)+Mj+ti)<<

GG(a,b,c,d,Mj,s,ti)表示a=b+((a+G(b,c,d)+Mj+ti)<<

HH(a,b,c,d,Mj,s,ti)表示a=b+((a+H(b,c,d)+Mj+ti)<<

II(a,b,c,d,Mj,s,ti)表示a=b+((a+I(b,c,d)+Mj+ti)<<

四轮运算

第一轮

a=FF(a,b,c,d,M0,7,0xd76aa478)

b=FF(d,a,b,c,M1,12,0xe8c7b756)

c=FF(c,d,a,b,M2,17,0x242070db)

d=FF(b,c,d,a,M3,22,0xc1bdceee)

a=FF(a,b,c,d,M4,7,0xf57c0faf)

b=FF(d,a,b,c,M5,12,0x4787c62a)

c=FF(c,d,a,b,M6,17,0xa8304613)

d=FF(b,c,d,a,M7,22,0xfd469501)

a=FF(a,b,c,d,M8,7,0x698098d8)

b=FF(d,a,b,c,M9,12,0x8b44f7af)

c=FF(c,d,a,b,M10,17,0xffff5bb1)

d=FF(b,c,d,a,M11,22,0x895cd7be)

a=FF(a,b,c,d,M12,7,0x6b901122)

b=FF(d,a,b,c,M13,12,0xfd987193)

c=FF(c,d,a,b,M14,17,0xa679438e)

d=FF(b,c,d,a,M15,22,0x49b40821)

第二轮

a=GG(a,b,c,d,M1,5,0xf61e2562)

b=GG(d,a,b,c,M6,9,0xc040b340)

c=GG(c,d,a,b,M11,14,0x265e5a51)

d=GG(b,c,d,a,M0,20,0xe9b6c7aa)

a=GG(a,b,c,d,M5,5,0xd62f105d)

b=GG(d,a,b,c,M10,9,0x02441453)

c=GG(c,d,a,b,M15,14,0xd8a1e681)

d=GG(b,c,d,a,M4,20,0xe7d3fbc8)

a=GG(a,b,c,d,M9,5,0x21e1cde6)

b=GG(d,a,b,c,M14,9,0xc33707d6)

c=GG(c,d,a,b,M3,14,0xf4d50d87)

d=GG(b,c,d,a,M8,20,0x455a14ed)

a=GG(a,b,c,d,M13,5,0xa9e3e905)

b=GG(d,a,b,c,M2,9,0xfcefa3f8)

c=GG(c,d,a,b,M7,14,0x676f02d9)

d=GG(b,c,d,a,M12,20,0x8d2a4c8a)

第三轮

a=HH(a,b,c,d,M5,4,0xfffa3942)

b=HH(d,a,b,c,M8,11,0x8771f681)

c=HH(c,d,a,b,M11,16,0x6d9d6122)

d=HH(b,c,d,a,M14,23,0xfde5380c)

a=HH(a,b,c,d,M1,4,0xa4beea44)

b=HH(d,a,b,c,M4,11,0x4bdecfa9)

c=HH(c,d,a,b,M7,16,0xf6bb4b60)

d=HH(b,c,d,a,M10,23,0xbebfbc70)

a=HH(a,b,c,d,M13,4,0x289b7ec6)

b=HH(d,a,b,c,M0,11,0xeaa127fa)

c=HH(c,d,a,b,M3,16,0xd4ef3085)

d=HH(b,c,d,a,M6,23,0x04881d05)

a=HH(a,b,c,d,M9,4,0xd9d4d039)

b=HH(d,a,b,c,M12,11,0xe6db99e5)

c=HH(c,d,a,b,M15,16,0x1fa27cf8)

d=HH(b,c,d,a,M2,23,0xc4ac5665)

第四轮

a=II(a,b,c,d,M0,6,0xf4292244)

b=II(d,a,b,c,M7,10,0x432aff97)

c=II(c,d,a,b,M14,15,0xab9423a7)

d=II(b,c,d,a,M5,21,0xfc93a039)

a=II(a,b,c,d,M12,6,0x655b59c3)

b=II(d,a,b,c,M3,10,0x8f0ccc92)

c=II(c,d,a,b,M10,15,0xffeff47d)

d=II(b,c,d,a,M1,21,0x85845dd1)

a=II(a,b,c,d,M8,6,0x6fa87e4f)

b=II(d,a,b,c,M15,10,0xfe2ce6e0)

c=II(c,d,a,b,M6,15,0xa3014314)

d=II(b,c,d,a,M13,21,0x4e0811a1)

a=II(a,b,c,d,M4,6,0xf7537e82)

b=II(d,a,b,c,M11,10,0xbd3af235)

c=II(c,d,a,b,M2,15,0x2ad7d2bb)

d=II(b,c,d,a,M9,21,0xeb86d391)

常数ti可以如下选择:在第i步中,ti是4294967269*adb(sin(i))的整数部分,i的单位是弧度。4294967269=2^32。

每轮循环后,将A,B,C,D分别加上a,b,c,d,然后进入下一循环

最后输出的是ABCD的级联。

在Java中,java.security.MessageDiagest中已经定义了MD5的计算,只需要简单的调用就可以得到MD5的128位整数。然后将次128位(16个字节)转换成十六进制表示就可以了。

md5压缩函数用java实现,MD5压缩算法介绍相关推荐

  1. Java实现MD5(32/16位大小写)加密

    MD5简单介绍 大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法:与之类似,MD5就可以为任何文件(不管其大小.格式.数量)产生一个同样独一无二的&quo ...

  2. Java实现MD5工具类

    目录 一.简介 二.MD5的特性 三.MD5工具类 四.实践 结语 一.简介   MD5 消息摘要算法是一种广泛使用的哈希函数,具有 128 位哈希值.虽然 MD5 最初被设计为用作加密哈希函数,但已 ...

  3. MD5工具类(java实现版)

    MD5工具类(java实现版) 介绍 MD5(Message Digest Algorithm)加密算法是不对称的加密算法,因为其实不可逆的,实际上其不能算作加密算法, 因为其不可解密.其实现原理是基 ...

  4. Java实现MD5加密以及解密

    MD5的介绍 从本质上来说,MD5并不是一种加密算法,其全称是Message Digest Algorithm MD5(中文名:信息摘要算法第五版),为计算机安全领域广泛使用的一种散列函数,主要用于确 ...

  5. MD5算法的Java实现

    文章目录 一.算法原理概述 MD5 即Message-Digest Algorithm 5 (信息-摘要算法5) 基本流程 填充padding 分块 初始化 压缩函数 二.总体结构 三.模块分解 填充 ...

  6. MD5算法了解(JAVA实现)

    MD5算法:尽管已经被破解,但任然广泛应用于各个领域中 如文件校验:当我们下载文件时为了保证文件的安全性,我们能够在其站点上找到相应的md5值进行校验,假设md5值不一致,也就是说文件被人动过(一般都 ...

  7. Java实现MD5加密和文件校验

    MD5简介: MD5的全称:Message-Digest Algorithm 5(信息-摘要算法5) MD5的加密方式是一种哈希加密.一些主流的编程语言都已经实现了MD5的加密,所以如果你的程序或是系 ...

  8. java中完成md5加密解密_java实现md5加密解密 notNET中加密和解密的实现方法

    java实现md5加密解密 notNET中加密和解密的实现方法 亦或是旅途风光 7-14 1918℃ 22 [ ee21.cn - ASP.NET ] .NET将原来独立的API和SDK合并到一个框架 ...

  9. 【建议收藏】MD5 算法的Java Bean

    MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输 ...

最新文章

  1. java struts技术_java技术框架之:struts
  2. Android学习记录:SQLite数据库、res中raw的文件调用
  3. Qt学习笔记之常用控件QlistWidget
  4. 端到端机器学习_端到端机器学习项目:评论分类
  5. 关于字符串截取的函数
  6. CentOS 6升级默认python版本
  7. python写代码酷炫插件_使用 Python 制作酷炫多彩的 Jenkins 插件词云图
  8. HDU 6074 - Phone Call | 2017 Multi-University Training Contest 4
  9. C 语言中获取文件长度(ftell函数)
  10. java网吧计费系统源码_基于jsp的网吧计费管理系统-JavaEE实现网吧计费管理系统 - java项目源码...
  11. iis php性能优化,iis优化网站运行速度 网站浏览更加快
  12. Word如何插入图片
  13. 在主动要求涨工资这事上,不要学我!从第一份工资800开始说起
  14. ps平面设计作业_海报设计
  15. 中国大学慕课公开课-《视听语言》-学习笔记-2
  16. 互联网+大赛评审规则浅析
  17. 基于CKEditor网页富文本编辑工具转PDF文件的技术预研分析报告
  18. 怎么把信息秒回做到极致?IMO班聊也是拼了
  19. Foundation5(十五)
  20. Spring是什么?IoC容器的理解

热门文章

  1. 全面讲解Web3.0域名的应用场景-赛道情况-未来挑战
  2. 问:adb连接逍遥模拟器时,报offline。
  3. groupcache源码解析(IRU)
  4. 2021年锅炉作业-工业锅炉司炉 (G1)考试题库
  5. 如何查看自己亚马逊的的库存容量?
  6. 手机网络游戏 一座尚待挖掘的金矿
  7. 云手机服务器解决方案
  8. Developing Backbone.js Applications
  9. 【 1小时打通你的英语任督二脉—雪梨】—荔枝直播总结分享
  10. 今日小程序推荐:码农老黄历-看今天哪个方位BUG最少