密码学实验MD5实验.docx
- 文档编号:30628729
- 上传时间:2023-08-18
- 格式:DOCX
- 页数:9
- 大小:391.17KB
密码学实验MD5实验.docx
《密码学实验MD5实验.docx》由会员分享,可在线阅读,更多相关《密码学实验MD5实验.docx(9页珍藏版)》请在冰豆网上搜索。
密码学实验MD5实验
密码学实验
——计算文件MD5值
姓名:
班级:
学号:
教师:
助教:
【1】Hash算法实验
(1)MD5\SHA1\SHA-256算法比较
A.【相同点】MD5,SHA1,SHA-256属于密码级散列函数,算法相对比较复杂,参与加密算法的过程中时也比较安全,三者都是属于哈希算法一类,都是任意长度的消息压缩到某一固定长度的消息摘要的函数
B.【不同点】
MD5输出128bit
SHA1输出160bit
SHA256输出256bit
1普通密码可以用MD5,但数字证书和数字签名就法定必须用SHA256
2MD5比SHA1快,SHA1比MD5强度高
C.截图
(2)相同与相似字符串MD5差异比较
【2】Hash算法过程与填充方式
【常见Hash算法的数据填充方式】
1.首位填充1,后面填满0位;【即:
先补一个1,然后再补0,直到长度满足对512取模后余数是448。
】
2.补长度;【通常用一个64位的数据来表示原始消息的长度。
如果消息长度不大于2^64,那么第一个字就是0;如果原始的消息长度超过了512,我们需要将它补成512的倍数。
然后我们把整个消息分成一个一个512位的数据块,分别处理每一个数据块,从而得到消息摘要】
【3】计算文件MD5值
1.源代码【hello.exe\erase.exe文件放在其中的src文件夹中】
packagecom.topcheer;
importjava.io.File;
importjava.io.FileInputStream;
importjava.io.IOException;
importjava.nio.MappedByteBuffer;
importjava.nio.channels.FileChannel;
importjava.security.MessageDigest;
importjava.security.NoSuchAlgorithmException;
importjava.util.Scanner;
publicclassEXEMD5{
/*设置MD5值输出为16进制(从0到F)*/
protectedstaticcharhexDigits[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F'};
/*获取MD5算法,并判断是否存在MD5算法(判断是否正确导入了加密库)*/
protectedstaticMessageDigestmessagedigest=null;
static{
try{
messagedigest=MessageDigest.getInstance("MD5");
}catch(NoSuchAlgorithmExceptione){
e.printStackTrace();
}
}
/*计算文件(包括EXE文件)MD5值的算法*/
publicstaticStringgetFileMD5String(Filefile)throwsIOException{
FileInputStreamin=newFileInputStream(file);
FileChannelch=in.getChannel();
MappedByteBufferbyteBuffer=ch.map(FileChannel.MapMode.READ_ONLY,0,file.length());
messagedigest.update(byteBuffer);
returnbufferToHex(messagedigest.digest());
}
/*将字节数组转换为字符串类型*/
privatestaticStringbufferToHex(bytebytes[]){
returnbufferToHex(bytes,0,bytes.length);
}
/*将字节数组从第m位元素到第n位元素的部分转换成字符串类型*/
privatestaticStringbufferToHex(bytebytes[],intm,intn){
StringBufferstringbuffer=newStringBuffer(2*n);
intk=m+n;
for(intl=m;l appendHexPair(bytes[l],stringbuffer); } returnstringbuffer.toString(); } privatestaticvoidappendHexPair(bytebt,StringBufferstringbuffer){ charc0=hexDigits[(bt&0xf0)>>4]; charc1=hexDigits[bt&0xf]; stringbuffer.append(c0); stringbuffer.append(c1); } publicstaticvoidmain(String[]args)throwsIOException{ System.out.println("请选择你要计算MD5值的应用程序文件! "); System.out.println("【1】erase.exe【2】hello.exe"); intchoose=newScanner(System.in).nextInt(); Fileexe=null; if(choose==1){ exe=newFile("./src/erase.exe"); } elseif(choose==2){ exe=newFile("./src/hello.exe"); } else{ System.out.println("非法输入,请重新运行程序! "); System.exit(0); } longbeginTime=System.nanoTime(); Stringmd5=getFileMD5String(exe); longendTime=System.nanoTime(); doubletime=endTime-beginTime; System.out.println("【运行结果】"); System.out.println("选择的文件是: "+exe.getName()); System.out.println("该文件MD5值: "+md5); System.out.println("计算MD5用时: "+(time/1000000)+"毫秒"); } } 2.程序运行结果截图 【结论】 我们不难发现,这两个EXE文件虽然内容不同,但是MD5值却是相同的!
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 密码学 实验 MD5
![提示](https://static.bdocx.com/images/bang_tan.gif)