一、实验目的及要求

1.熟悉加密、解密算法;懂得加密在通信中的重要作用;

2.对输入的十六进制数加密(把输入的字符转化成整数),比较输入和输出,当把输入的数改变一个比特时,比较输出的变化,说明原因。

3.实现对一个文件进行加解密,提交程序代码和执行结果。

二、实验内容

本实验通过用DES算法对实际的数据进行加密和解密来深刻了解DES的运行原理。根据所提供的程序分析DES算法的实现过程。在分析密钥生成函数、加密函数(8字节)、解密函数、测试函数和密钥长度检验函数的基础上,用C/VC++或Java语言编写程序实现对文本文件进行加解密。

三、实验环境

运行windows或Linux操作系统的PC机,具有VC(windows)、gcc(Linux)等C语言编译环境或Java环境。

四、实验步骤及结果分析

  1. 运行结果

1.1、原文件

加密后的文件

解密后的文件

  1. 代码

public class TestDES {
    Key key;

public TestDES(String str) {
        getKey(str);// 生成密匙
   
}
  
     // 根据参数生成KEY
   
public void getKey(String strKey) {
        try {
            KeyGenerator _generator = KeyGenerator.getInstance("DES");
            _generator.init(new SecureRandom(strKey.getBytes()));
            this.key = _generator.generateKey();
            _generator = null;
        }
        catch (Exception e) {
            throw new RuntimeException("Error initializing SqlMap class. Cause: " + e);
        }
    }

public void encrypt(String file, String destFile) throws Exception {
        Cipher cipher = Cipher.getInstance("DES");
        // cipher.init(Cipher.ENCRYPT_MODE, getKey());
       
cipher.init(Cipher.ENCRYPT_MODE, this.key);
        InputStream is = new FileInputStream(file);
        OutputStream out = new FileOutputStream(destFile);
        CipherInputStream cis = new CipherInputStream(is, cipher);
        byte[] buffer = new byte[1024];
        int r;
        while ((r = cis.read(buffer)) > 0) {
            out.write(buffer, 0, r);
        }
        cis.close();
        is.close();
        out.close();
    }

public void decrypt(String file, String dest) throws Exception {
        Cipher cipher = Cipher.getInstance("DES");
        cipher.init(Cipher.DECRYPT_MODE, this.key);
        InputStream is = new FileInputStream(file);
        OutputStream out = new FileOutputStream(dest);
        CipherOutputStream cos = new CipherOutputStream(out, cipher);
        byte[] buffer = new byte[1024];
        int r;
        while ((r = is.read(buffer)) >= 0) {
            cos.write(buffer, 0, r);
        }
        cos.close();
        out.close();
        is.close();
    }

public static void main(String[] args) throws Exception {
        TestDES td = new TestDES("24234");
        td.encrypt("D:/Desktop/test.txt", "D:/Desktop/test1.txt"); // 加密
       
td.decrypt("D:/Desktop/test1.txt", "D:/Desktop/test2.txt"); // 解密
   
}
}

信息安全实验一:DES加密算法的实现相关推荐

  1. 实验一 DES加密算法编程实现

    华南理工大学 软件学院 陈春华 (博士) chunhuachen@scut.edu.cn 一. 实验目的 通过使用DES 算法对实验数据进行加密和解密,掌握现代分组密码算法基本原理,熟练掌握DES 算 ...

  2. c语言des算法实验报告,c语言实现des算法des加密算法实验报告

    c语言实现des算法des加密算法实验报告 (23页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 19.90 积分 xx 工程大学工程大学实验报告实验报告 ...

  3. 软考信息安全工程师必会--3000+字文章浅析DES加密算法

    目录 前言 什么是DES加密算法 整体流程 IP置换 子密钥K 压缩置换1 循环左移 拓展置换2 拓展置换E S盒代替 S1盒 S2盒 S3盒 S4盒 S5盒 S6盒 S7盒 S8盒 P盒置换 末置换 ...

  4. DES加密算法安全性评估

    DES加密算法应用误区 DES算法具有极高安全性,到目前为止,除了用穷举搜索法对DES算法进行攻击外,还没有发现更有效的办法.而56位长的密钥的穷举空间为256,这意味着如果一台计算机的速度是每一秒种 ...

  5. 算法科普:神秘的 DES 加密算法

    1 前言 DES 算法是一种常见的分组加密算法,由IBM公司在1971年提出.DES 算法是分组加密算法的典型代表,同时也是应用最为广泛的对称加密算法.本文将详细讲述DES 的原理以及实现过程. 1. ...

  6. des加密算法python代码_python des加密算法代码(pydes模块加密)

    python加密解密模块:pyDES模块,用来提供 DES.Triple-DES 的加密算法. 专题教程: DES加密算法,DES加密解密 python des加密解密算法 例子,Python DES ...

  7. java实验二答案天津商业大学_天津商业大学信息安全实验一

    天津商业大学信息安全实验一 1<信息安全技术>实 验 报 告 书实验名称: 实验一Internet应用风险专 业: 电子商务班 级: 1203班姓 名: 代常发学 号: 20124934指 ...

  8. destools php_php DES加密算法实例分析

    本文实例讲述了php DES加密算法.分享给大家供大家参考,具体如下: yii框架的DES代码 /** *@see Yii CSecurityManager; */ class Des{ public ...

  9. 科软-信息安全实验3-Rootkit劫持系统调用

    目录 一 前言 二 Talk is cheap, show me the code 三 前期准备 四 效果演示 五 遇到的问题&解决 六 18.04的坑 七 参考资料 八 老师可能的提问 一 ...

  10. 证明:DES解密算法是DES加密算法的逆

    证明: 由于DES算法是在Feistel网络结构的输入和输出阶段分别初始置换IP和初始逆置换IP-1而构成的,其余DES和Feistel相同,IP和IP–1互逆.所以只需证明Feistel解密算法和加 ...

最新文章

  1. Matlab与线性代数 -- 矩阵的重组4
  2. CMD如何生成文件夹目录结构
  3. Eclipse设置字体
  4. VS 2019要来了,是时候了解一下C# 8.0新功能
  5. svn安装教程 mysql_CentOS6.4 下安装SVN的详细教程(超详细)
  6. postgresql 客户端_一款功能强大的数据库客户端:DataGrip
  7. SpringMVC自学日志03(SpringMVC注解)
  8. spring boot入门学习---热部署
  9. mars java安卓视频教程下载_mars老师[Android开发视频教学].01_18 文件下载 源码
  10. 一文带你详细了解光纤传感器
  11. Java中抽象类和接口的区别
  12. 广义相对论和量子力学在哪些地方发生了严重的冲突(转)
  13. struts2优点总结
  14. Axure的入门到精通(一)——基础使用及常用快捷键
  15. Linux下的按键精灵xdotool
  16. lumberjack 实现按时间分割日志文件
  17. Object Removal by Exemplar-Based Inpainting 翻译
  18. 皇氏集团迷途知返,但乳业市场还能接受它吗?
  19. 工作中的纠结——区分于底层OR界面
  20. 文件头文件尾全面总结

热门文章

  1. Ubuntu挂载微软NTFS格式硬盘
  2. linux远程执行脚本
  3. 【Educational Codeforces Round 10C】【脑洞 SET】Foe Pairs 不含有敌对pair的区间数
  4. 软件测试 - 缺陷管理
  5. 什么是回音消除技术?
  6. 2020年9月北京BGP机房网络质量评测:天地祥云木樨园力压群芳终进前三
  7. 【长句分析】2019.7.26
  8. Web网页、安卓、ios、平板等的网站图标制作Favicon.ico
  9. 优化大数据量查询方案——SpringBoot(Cloud)整合ES
  10. 两个服务器之间项目通过nginx内网映射