密码学MD实验分析报告
- 格式:docx
- 大小:14.14 KB
- 文档页数:9
密码学MD实验报告
作者: 日期:
实验四:密码学MD5实验报告
import java.io.File;
import java.io.Filel nputStream;
import java.io .10 Exceptio n;
import java. ni o.MappedByteBufer;
import java .ni o.cha nn els.FileCha nn el;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmExceptio n;
import java.util.Sca nner;
public class EXEMD5 {
/*设置MD5值输出为16进制(从0到F)*/
protected static char hexDigits [] = { '0', '1',2, 3, 4,'5', 6, 7: 8,
9,'A', 'B', C, 'D', 'E', 'F'};
/*获取MD5算法,并判断是否存在MD5算法(判断是否正确导入了加密库)*/
protected static MessageDigest messagedigest = null ;
static {
try {
messagedigest = MessageDigest. get In sta nee ("MD5");
} eateh (NoSuchAlgorithmException e) {
e.pri ntStackTrace();
}
}
/*计算文件(包括EXE文件)MD5值的算法*/
public static String getFileMD5String(File file) throws IOException{ FileInputStream in = new FileInputStream(file);
FileCha nnel ch =i n.getCha nn el();
MappedByteBuffer byteBuffer
=ch.m ap(FileCha nn el.M apMode. READ_ONLY, 0, file.le ngth());
messagedigest .update(byteBuffer);
return bufferToHex (messagedigest .digest());
}
/*将字节数组转换为字符串类型*/
private static String bufferToHex( byte bytes[]){
return bufferToHex (bytes, 0,bytes.length);
/*将字节数组从第m位元素到第n位元素的部分转换成字符串类型*/ private static String bufferToHex( byte bytes[], int m, int n){
StringBuffer stringbuffer = new StringBuffer(2 * n);
int k = m + n;
for (int l = =m; l< k; I++) {
appendHexPair (bytes[l], stringbuffer);
}
return stri ngbuffer.toStri ng();
}
private static void appendHexPair( byte bt, StringBuffer stringbuffer) { char cO = hexDigits [(bt& OxfO) >> 4];
char cl = hexDigits [bt& Oxf];
stri ngbuffer.appe nd(cO);
stri ngbuffer.appe nd(c1);
}
£j^SI@Javsdoc 百明S 揑制台S3
u已蜒止=EXEMD5 ( 1 ] [Jav^ 应用程序]C:\Program Fi le s\J a va1^ re7\b!ri\j^vaw.
请选择你要计算MO 511的应用程序交件!
【1 】erase・exe 【2】hello^exe
2
【运行结果】
选择的文件是该文件MD5倩计茸MD5用时hello <exe
CDC47D670159EEF60916CA03A9D4A007 14.303954sf)
实验结果分析
我们不难发现,这两个EXE文件虽然内容不同,但是MD5值却是相同的!
MD5用于确保信息传输完整一致。
是计算机广泛使用的杂凑算法之一(又
译摘要算法、哈希算法),主流编程语言普遍已有MD5实现。
MD5算法具有以下特点:
1、压缩性:任意长度的数据,算出的MD5值长度都是固定
的
2、容易计算:从原数据计算出MD5值很容易。
3、抗修改性:对原数据进行任何改动,
值都有很大区别。
哪怕只修改1个字节, 所得到的
4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。
MD5的作用是让大容量信息在用数字签名软件签署私人密钥前被"压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的十六进制数字串)。