• 信息安全实验一:DES加密算法的实现


    一、实验目的及要求

    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"); // 解密
       
    }
    }

  • 相关阅读:
    Word使用小技巧
    python07_函数
    不愧为清华大佬!只用30小时,就整理完成了这份JVM调优实战笔记
    RabbitMQ进阶
    机器学习模型与backtrader框架整合
    【Web前端】一文带你吃透CSS(中篇)
    v-decorator和v-model的使用对比
    电影售票系统
    关于道一云-七巧使用感悟
    nginx优化--压缩
  • 原文地址:https://blog.csdn.net/m0_48958478/article/details/125510010