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

一、实验目的及要求

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

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

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

二、实验内容

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

三、实验环境

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

四、实验步骤及结果分析

      

  1. 运行结果

1.1、原文件

信息安全实验一:DES加密算法的实现_第1张图片

加密后的文件

信息安全实验一:DES加密算法的实现_第2张图片

解密后的文件

信息安全实验一:DES加密算法的实现_第3张图片

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

你可能感兴趣的:(信息安全,java,servlet,服务器,DES加密)