• 语文科
  • 数学科
  • 英语科
  • 政治科
  • 物理科
  • 化学科
  • 地理科
  • 历史科
  • 生物科
  • 中考备战
  • 高考备战
  • 高考试题
  • 中考试题
  • 当前位置: 天一资源网 > 密码学 正文

    密码学实验总结 [密码学md5实验报告]

    时间:2020-07-22 12:53:30 来源:天一资源网 本文已影响 天一资源网手机站

      实验四:密码学MD5实验报告

     专业: 计算机科学与技术 班级:2015级 姓名:孟亚超 学号:20150402201006 

     实验名称

     密码学MD5

     实验目的自学md5原理,编写MD5算法,了解算法工作过程

     实验原理

     MD5是一个不可逆的算法,是单向的,通常用于签名验证和一些不需要还原原文的算法,这种算法加密后就不能还原回原文,这种算法还原回原文有无穷种原文,所以理论上是不可能被还原的注意事项

     MD5不可能被还原

     MD5算法加密后的长度是固定的,长度为32位

     实验环境说明

     Window7

     Java jdk

     Eclipse for EE

     实验步骤

     源代码

     package com.topcheer;

      ?import java.io.File;

      import java.io.;

      import java.io.IOException;

     ?import java.nio.MappedByteBuffer;

      import java.nio.channels.;

      import java.security.MessageDigest;

     ?import java.security.NoSuchAlgorithmException;

      import java.util.Scanner;

      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.getInstance("MD5");

      } catch (NoSuchAlgorithmException e) {

     e.printStackTrace();

      }

      }

     /*计算文件(包括EXE文件)MD5值的算法*/

     public static String get() throws IOException{

         in = new (file);

        ch =in.getChannel();

      MappedByteBuffer byteBuffer =ch.map(.READ_ONLY, 0, ());

        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; l++) {

      appendHexPair(bytes[l], stringbuffer);  

      }

      return stringbuffer.toString();

      }

     private static void appendHexPair(byte bt, StringBuffer stringbuffer) {

      char c0 = hexDigits[(bt& 0xf0) >> 4];

        char c1 = hexDigits[bt& 0xf];

      stringbuffer.append(c0);

       stringbuffer.append(c1);

     }

     public static void main(String[] args) throws IOException{

     ? System.out.println("请选择你要计算MD5值的应用程序文件!");

      System.out.println("【1】erase.exe 【2】hello.exe");

     ? int choose=new Scanner(System.in).nextInt();

     ? null;

     ? if(choose==1){

     ? exe = new File("./src/erase.exe");

      }

       else if(choose==2){

      exe = new File("./src/hello.exe");

     ? }

     ? else{

      ? System.out.println("非法输入,请重新运行程序! ");

      ? System.exit(0);

      }

     ? long beginTime=System.nanoTime();

     ? String md5=get(exe);

     ? long endTime =System.nanoTime();

     ? double time=endTime-beginTime;

     ? System.out.println("【运行结果】");

      System.out.println("选择的文件是: "+exe.getName());

     ? System.out.println("该文件MD5值: "+md5);

     ? System.out.println("计算MD5用时:  "+(time/1000000)+"毫秒");

      }

     }

     程序运行结果截图

     实验结果分析

     我们不难发现,这两个EXE文件虽然内容不同,但是MD5值却是相同的!

     MD5,用于确保信息传输完整一致。是计算机广泛使用的杂凑算法之一(又译 HYPERLINK "" \t "_blank" 摘要算法、 HYPERLINK "" \t "_blank" 哈希算法),主流编程语言普遍已有MD5实现。

     MD5算法具有以下特点:

     1、压缩性:任意长度的数据,算出的MD5值长度都是固定的。

     2、容易计算:从原数据计算出MD5值很容易。

     3、抗修改性:对原数据进行任何改动,哪怕只修改1个字节,所得到的MD5值都有很大区别。

     4、强抗碰撞:已知原数据和其MD5值,想找到一个具有相同MD5值的数据(即伪造数据)是非常困难的。

     MD5的作用是让大容量信息在用 HYPERLINK "" \t "_blank" 数字签名软件签署私人 HYPERLINK "" \t "_blank" 密钥前被" HYPERLINK "" \t "_blank" 压缩"成一种保密的格式(就是把一个任意长度的字节串变换成一定长的 HYPERLINK "" \t "_blank" 十六进制数字串)。

    相关关键词: 密码学
    相关热词搜索: 密码学 实验 报告 md5

    • 范文大全
    • 教案下载
    • 优秀作文
    • 励志
    • 课件
    • 散文
    • 名人名言