-
报文摘要 编辑
报文摘要(MD)是一种用于检查报文是否正确的方法(例如信道噪音的干扰)
MessageDigest对象开始被初始化。该对象通过使用update方法处理数据。任何时候都可以调用reset方法重置摘要。一旦所有需要更新的数据都已经被更新了,应该调用digest方法之一完成哈希计算。
对于给定数量的更新数据,digest方法只能被调用一次。digest被调用后,MessageDigest对象被重新设置成其初始状态。
术语和符号
本文中一个“字”是32位,一个“字节”是8位。一系列位串可看成是一系列字节的普通形式,
其中的连续的8位看成一个字节,高位在前,同理一系列字节串可看成是一系列32位的字,其中每
个连续的4个字节当作一个字,低位在前。
我们定义x_i代表“x减去I”.如果下划线左边的是一个表达式,则用括号括住,如:
x_{i+1}。同样我们用^代表求幂,这样x^i则代表x的i次幂。
符号“+”代表字的加,X<s代表32位的值X循环左移s位,not(X)代表X的按位
补运算,XvY表示X和Y的按位或运算,XxorY代表X和Y的按位异或运算,XY代表
X和Y的按位与运算。
MD5算法描述
我们假设有一个b位长度的输入信号,希望产生它的报文摘要,此处b是一个非负整数,b也可
能是0,不一定必须是8的整数倍,它可能是任意大的长度。我们设想信号的比特流如下所示:
m_0m_1...m_{b-1}
下面的5步计算信息的报文摘要。
(1)补位
MD5算法是对输入的数据进行补位,使得如果数据位长度LEN对512求余的结果是448。即数
据扩展至K*512+448位。即K*64+56个字节,K为整数。补位操作始终要执行,即使数据长度LEN
对512求余的结果已是448。
具体补位操作:补一个1,然后补0至满足上述要求。总共最少要补一位,最多补512位。
(2)补数据长度
用一个64位的数字表示数据的原始长度b,把b用两个32位数表示。那么只取B的低64位。
当遇到b大于2^64这种极少遇到的情况时,这时,数据就被填补成长度为512位的倍数。也就是说,
此时的数据长度是16个字(32位)的整数倍数。用M表示此时的数据,其中的N是16
的倍数。
(3)初始化MD缓冲器
算法
实现可随意选择是否实现Cloneable接口。客户端应用程可以通过尝试复制和捕获CloneNotSupportedException测试可复制性:
MessageDigestmd=MessageDigest.getInstance("SHA");
try{
md.update(toChapter1);
MessageDigesttc1=md.clone();
bytetoChapter1Digest=tc1.digest();
md.update(toChapter2);
...etc.
}catch(CloneNotSupportedExceptioncnse){
thrownewDigestException("couldn'tmakedigestofpartialcontent");
}
2,由于历史原因,此类是抽象的,是从MessageDigestSpi扩展的。应用程序开发人员只应该注意在此MessageDigest类中定义的方法;超类中的所有方法是供希望提供自己的信息摘要算法实现的加密服务提供者使用的。
1、本站所有文本、信息、视频文件等,仅代表本站观点或作者本人观点,请网友谨慎参考使用。
2、本站信息均为作者提供和网友推荐收集整理而来,仅供学习和研究使用。
3、对任何由于使用本站内容而引起的诉讼、纠纷,本站不承担任何责任。
4、如有侵犯你版权的,请来信(邮箱:baike52199@gmail.com)指出,核实后,本站将立即删除。