md5压缩函数用java实现,MD5压缩算法介绍
概述
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压缩算法介绍相关推荐
- Java实现MD5(32/16位大小写)加密
MD5简单介绍 大家都知道,地球上任何人都有自己独一无二的指纹,这常常成为公安机关鉴别罪犯身份最值得信赖的方法:与之类似,MD5就可以为任何文件(不管其大小.格式.数量)产生一个同样独一无二的&quo ...
- Java实现MD5工具类
目录 一.简介 二.MD5的特性 三.MD5工具类 四.实践 结语 一.简介 MD5 消息摘要算法是一种广泛使用的哈希函数,具有 128 位哈希值.虽然 MD5 最初被设计为用作加密哈希函数,但已 ...
- MD5工具类(java实现版)
MD5工具类(java实现版) 介绍 MD5(Message Digest Algorithm)加密算法是不对称的加密算法,因为其实不可逆的,实际上其不能算作加密算法, 因为其不可解密.其实现原理是基 ...
- Java实现MD5加密以及解密
MD5的介绍 从本质上来说,MD5并不是一种加密算法,其全称是Message Digest Algorithm MD5(中文名:信息摘要算法第五版),为计算机安全领域广泛使用的一种散列函数,主要用于确 ...
- MD5算法的Java实现
文章目录 一.算法原理概述 MD5 即Message-Digest Algorithm 5 (信息-摘要算法5) 基本流程 填充padding 分块 初始化 压缩函数 二.总体结构 三.模块分解 填充 ...
- MD5算法了解(JAVA实现)
MD5算法:尽管已经被破解,但任然广泛应用于各个领域中 如文件校验:当我们下载文件时为了保证文件的安全性,我们能够在其站点上找到相应的md5值进行校验,假设md5值不一致,也就是说文件被人动过(一般都 ...
- Java实现MD5加密和文件校验
MD5简介: MD5的全称:Message-Digest Algorithm 5(信息-摘要算法5) MD5的加密方式是一种哈希加密.一些主流的编程语言都已经实现了MD5的加密,所以如果你的程序或是系 ...
- java中完成md5加密解密_java实现md5加密解密 notNET中加密和解密的实现方法
java实现md5加密解密 notNET中加密和解密的实现方法 亦或是旅途风光 7-14 1918℃ 22 [ ee21.cn - ASP.NET ] .NET将原来独立的API和SDK合并到一个框架 ...
- 【建议收藏】MD5 算法的Java Bean
MD5信息摘要算法(英语:MD5 Message-Digest Algorithm),一种被广泛使用的密码散列函数,可以产生出一个128位(16字节)的散列值(hash value),用于确保信息传输 ...
最新文章
- java struts技术_java技术框架之:struts
- Android学习记录:SQLite数据库、res中raw的文件调用
- Qt学习笔记之常用控件QlistWidget
- 端到端机器学习_端到端机器学习项目:评论分类
- 关于字符串截取的函数
- CentOS 6升级默认python版本
- python写代码酷炫插件_使用 Python 制作酷炫多彩的 Jenkins 插件词云图
- HDU 6074 - Phone Call | 2017 Multi-University Training Contest 4
- C 语言中获取文件长度(ftell函数)
- java网吧计费系统源码_基于jsp的网吧计费管理系统-JavaEE实现网吧计费管理系统 - java项目源码...
- iis php性能优化,iis优化网站运行速度 网站浏览更加快
- Word如何插入图片
- 在主动要求涨工资这事上,不要学我!从第一份工资800开始说起
- ps平面设计作业_海报设计
- 中国大学慕课公开课-《视听语言》-学习笔记-2
- 互联网+大赛评审规则浅析
- 基于CKEditor网页富文本编辑工具转PDF文件的技术预研分析报告
- 怎么把信息秒回做到极致?IMO班聊也是拼了
- Foundation5(十五)
- Spring是什么?IoC容器的理解