文件加密与解密—Java课程设计报告
java文件的加密与解密
课程设计课程设计名称:Java课程设计专业班级:学生姓名:学号:指导教师:课程设计时间:2013.6.10-2013.6.21文件的加密与加密一、需求分析1.基本要求:1.实现文件的加密与解密。
2.使用GUI完成设计工作。
2.具体分析:1.向图形用户界面中添加组件,其中窗口中包括四个按钮,一个文本框,一个文本区。
2.设置各个组件的布局,其中文本框和加添加保存按钮在最上面,文本区在中间,加解密按钮在最下面。
3.添加窗口事件,其中包括添加事件、保存事件、加密事件和解密事件。
4. 查找读入及写入文件,并显示在文本区。
5.加密功能实现,其中已加密的文件不能重复加密。
6.解密功能实现,其中未加密的不能解密。
7.保存功能的实现二、概要设计图2-1设计模块图图2-2设计流程图三、运行环境、开发语言开发环境:JDK1.6开发语言:java语言四、详细设计1 程序清单表1程序清单2 主要代码2.1 主窗口显示功能此部分主要是主窗口界面,显示文本框、按钮和文本区。
该功能截图如图图4-1。
具体代码如下:Myframe(String s) {super(s);final JTextField namefield = new JTextField(15);namearea = new JTextArea(20,20);JPanel panel1 = new JPanel();JPanel panel2 = new JPanel();JButton button1 = new JButton("添加文件");JButton button2 = new JButton("保存");JButton button3 = new JButton("加密");JButton button4 = new JButton("解密");panel1.add(namefield);panel1.add(button1);panel1.add(button2);panel2.add(button3);panel2.add(button4);add(namearea,"Center");add(panel1, "North");add(panel2, "South");JScrollPane scrollPane=new JScrollPane(namearea);add(scrollPane);setSize(750, 600);setLocation(100, 100);setVisible(true);setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);}图4-1 主界面2.2 添加文件功能单击“添加文件”按钮,可以选择不通知磁盘目录下的文件(.txt)。
Java 加密与解密
东华理工大学信息工程学院《JAVA程序设计》课程设计报告课程设计名称加密与解密专业计算机科学与技术班级学号姓名2014年6 月19日目录一、设计任务与要求 (2)1.设计题目 (2)2.设计目的 (2)3.设计要求 (2)二、程序功能简介 (2)三、主要内容 (2)1.设计分析 (2)2.程序结构 (3)3.各模块的功能及程序说明 (4)4.操作方法 (5)四、核心代码及试验结果 (5)1.窗口事件 (5)2.加密操作模块 (6)3.解密操作模块 (9)五、收获与体会 (10)一、设计任务与要求1.设计题目加密与解密要求:采用图形用户界面(1)给定任意一个文本文件,进行加密,生成另一个文件。
(2)对加密后的文件还原。
2.目的(1)复习、巩固Java语言的基础知识,加深对Java语言的理解和掌握;(2)课程设计为学生提供了一个既动手又动脑,独立实践的机会,将课本上的理论知识和实际有机的结合起来,锻炼学生的分析解决实际问题的能力。
提高学生适应实际,实践编程的能力;(3)培养学生在项目开发中团队合作精神、创新意识及能力。
3.要求(1)对系统进行功能模块分析、控制模块分析正确,符合课题要求,实现相应功能;可以加以其他功能或修饰,使程序更加完善、合理;(2)系统设计要实用,编程简练,可用,功能全面(3)说明书、流程图要清楚(4)锯齿型书写格式,要求上机调试通过和按设计报告格式。
(5)设计上交内容:设计报告一份(按格式书写);源程序文件。
二、程序功能简介通过编程,实现“加密与解密”功能。
给定任意一个文本文件,进行加密,生成另一个文件。
对加密后的文件还原。
三、主要内容1.设计分析分析如下:1.向图形用户界面中添加组件。
2.设置各个组件的布局。
3.添加窗口事件。
4.查找读入及写入文件,并显示。
5.加密功能实现。
6.解密功能实现。
2.程序结构3.各模块的功能及程序说明图形用户界面模块:开始点击浏览读取文件输入密钥密钥非空YN加/解密是否存在此文件的加/解密文件N加/解密成功 NY图1 程序流程添加各种所需组件,设置窗口事件。
JAVA课程设计 文件加密解密
JAVA课程设计文件加密解密JAVA课程设计:文件加密解密在数字化时代,数据的安全性越来越受到重视。
随着互联网的普及,我们的个人和机密信息可能会面临被黑客窃取的风险。
为了保护数据的安全性,文件加密和解密成为了一项重要的技术。
文件加密是将文件中的内容转化为密文,使得未经授权的人无法直接读取其中的信息。
而文件解密则是将密文还原为原始的可读文件。
在JAVA课程设计中,我们可以利用JAVA编程语言来实现文件加密和解密的功能。
首先,我们需要了解加密算法的原理。
常见的加密算法包括对称加密和非对称加密。
对称加密使用相同的密钥进行加密和解密,而非对称加密则使用一对密钥,即公钥和私钥。
在本文中,我们将重点介绍对称加密算法。
对称加密算法中,常用的算法有DES、AES等。
我们以AES算法为例,来实现文件的加密和解密。
首先,我们需要导入Java Cryptography Extension (JCE) Unlimited Strength Jurisdiction Policy Files。
这是因为AES算法要求密钥长度为128位或以上,而默认的JDK只支持128位的密钥长度。
为了使用更长的密钥长度,我们需要下载并安装JCE Unlimited Strength Jurisdiction Policy Files。
接下来,我们需要编写加密和解密的代码。
我们可以使用Java的Cipher类来实现AES算法的加密和解密功能。
```javaimport javax.crypto.Cipher;import javax.crypto.KeyGenerator;import javax.crypto.SecretKey;import javax.crypto.spec.SecretKeySpec;import java.io.*;import java.security.NoSuchAlgorithmException;public class FileEncryption {public static void encryptFile(String inputFile, String outputFile, String key) throws Exception {SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec);try (FileInputStream inputStream = new FileInputStream(inputFile);FileOutputStream outputStream = new FileOutputStream(outputFile);CipherOutputStream cipherOutputStream = new CipherOutputStream(outputStream, cipher)) {byte[] buffer = new byte[8192];int count;while ((count = inputStream.read(buffer)) != -1) {cipherOutputStream.write(buffer, 0, count);}}}public static void decryptFile(String inputFile, String outputFile, String key) throws Exception {SecretKeySpec secretKeySpec = new SecretKeySpec(key.getBytes(), "AES");Cipher cipher = Cipher.getInstance("AES");cipher.init(Cipher.DECRYPT_MODE, secretKeySpec);try (FileInputStream inputStream = new FileInputStream(inputFile);CipherInputStream cipherInputStream = newCipherInputStream(inputStream, cipher);FileOutputStream outputStream = new FileOutputStream(outputFile)) {byte[] buffer = new byte[8192];int count;while ((count = cipherInputStream.read(buffer)) != -1) {outputStream.write(buffer, 0, count);}}}public static void main(String[] args) {try {String inputFile = "input.txt";String encryptedFile = "encrypted.txt";String decryptedFile = "decrypted.txt";String key = "ThisIsASecretKey";encryptFile(inputFile, encryptedFile, key);decryptFile(encryptedFile, decryptedFile, key);System.out.println("File encryption and decryption completed successfully.");} catch (Exception e) {e.printStackTrace();}}}```在上述代码中,我们定义了两个方法`encryptFile`和`decryptFile`,分别用于加密和解密文件。
java文件加密解密课程设计
JRadioButton qu, xie;
ButtonGroup fz;
File f;
public KeyPay() {
Container c = getContentPane();
JPanel jp1 = new JPanel();
jl1 = new JLabel("输入路径");
} catch (IOException e) {
// e.printStackTrace();
}
} catch (FileNotFoundException e) {
// e.printStackTrace();
}
}
public void qu() {
try {
FileInputStream in = new FileInputStream(f);
4.3详细设计
4.3.1类图
KeyPay
-shu1:String
-jl1 :JLabel
-jl2 :JLabel
-cc :String
-queding :JButton
-xuanz :JButton
-jiami :JButton
-jiemi :JButton
-lujin :JTextField
-key :JTextField
AA ac = (AA) input.readObject();
if (ac.getShu() == mima) {
nr.setText();
shuchu();
JOptionPane.showMessageDialog(null, "解密成功!");
} else {
文件加密java课程设计
文件加密 java课程设计一、课程目标知识目标:1. 让学生理解文件加密的基本概念,掌握相关的理论知识;2. 引导学生掌握Java语言实现文件加密的核心技术,如对称加密、非对称加密等;3. 让学生了解不同加密算法的优缺点,并能够根据实际需求选择合适的加密算法。
技能目标:1. 培养学生运用Java语言编写文件加密程序的能力;2. 培养学生分析问题、解决问题的能力,使其能够在实际项目中应用文件加密技术;3. 培养学生独立调试和优化代码的能力。
情感态度价值观目标:1. 培养学生对信息安全领域的兴趣,激发其学习热情;2. 培养学生具备良好的团队协作精神,使其在项目实践中能够与他人共同进步;3. 培养学生遵守法律法规,尊重网络安全,树立正确的价值观。
分析课程性质、学生特点和教学要求:1. 课程性质:本课程为实践性较强的课程,旨在让学生通过动手实践,掌握文件加密技术;2. 学生特点:学生具备一定的Java语言基础,对信息安全有一定了解,但缺乏实际项目经验;3. 教学要求:注重理论与实践相结合,以项目为导向,引导学生主动探究,培养其解决问题的能力。
1. 熟练掌握文件加密的基本概念和理论知识;2. 能够运用Java语言编写对称加密和非对称加密的文件加密程序;3. 能够分析不同加密算法的优缺点,并根据实际需求选择合适的加密算法;4. 培养良好的团队协作精神和遵守法律法规的意识。
二、教学内容1. 文件加密基础理论:- 加密概念与分类- 对称加密算法(如AES、DES)- 非对称加密算法(如RSA、ECC)- 哈希算法(如MD5、SHA)2. Java语言文件加密实现:- Java加密技术概述- 对称加密算法的Java实现- 非对称加密算法的Java实现- 哈希算法的Java实现3. 加密算法应用与案例分析:- 加密算法在实际项目中的应用场景- 分析不同加密算法的优缺点- 案例分析:文件加密与解密实现4. 教学内容安排与进度:- 第一周:文件加密基础理论- 第二周:对称加密算法的Java实现- 第三周:非对称加密算法的Java实现- 第四周:哈希算法的Java实现及加密算法应用与案例分析5. 教材章节及内容:- 第一章:引言与基础概念- 第二章:对称加密算法- 第三章:非对称加密算法- 第四章:哈希算法- 第五章:Java加密技术应用与实践教学内容科学性和系统性保障:1. 按照从理论到实践、由浅入深的顺序组织教学内容;2. 结合实际案例,使学生能够更好地理解和掌握加密技术;3. 强调加密技术在信息安全领域的重要性和实际应用,提高学生的应用能力。
java课程设计加密与解密实验报告
java课程设计加密与解密实验报告尊敬的老师:我将向您汇报我的Java课程设计——加密与解密实验报告。
本次实验旨在通过Java程序设计实现一些传统加密算法的加密与解密功能,并进行简单的性能分析。
以下是我的实验报告:一、实验目的通过Java程序设计实现传统加密算法的加密与解密功能,了解加密算法的基础原理,并进行简单的性能分析。
二、实验内容本次实验的主要内容包括:1. 实现Caesar加密算法、Playfair加密算法和Vigenere加密算法的加密与解密功能。
2. 编写能够对文字文件进行加密与解密的Java程序。
3. 对比不同算法的加密与解密性能,进行简单的性能分析。
三、实验步骤1. Caesar加密算法Caesar加密算法是一种简单的字母替换加密方式,通过移动字母表中的字母来生成密文。
例如,如果移动三个字母,则"A"变成"D","B"变成"E",以此类推。
加密和解密使用相同的密钥,在本实验中为整数。
实现步骤如下:① 定义CaesarCipher类,此类中包含了加密与解密方法。
② 加密方法接收一个字符串和密钥,通过对字符串中的每个字母进行移动,生成密文。
③ 解密方法接收一个密文和密钥,通过对密文中的每个字母进行相反的移动,还原出明文。
2. Playfair加密算法Playfair加密算法是一种算法复杂度较高的加密方式,利用了一个5x5的矩阵来进行加密。
实现步骤如下:① 定义PlayfairCipher类,此类中包含了加密与解密方法。
② 加密方法接收一个字符串和密钥,将明文分组并替换成加密后的密文。
③ 解密方法接收一个密文和密钥,将密文分组并替换成还原出的明文。
3. Vigenere加密算法Vigenere加密算法是一种基于凯撒密码的加密算法,使用一个关键词来对明文进行加密。
实现步骤如下:① 定义VigenereCipher类,此类中包含了加密与解密方法。
加密解密课程设计
兰州商学院陇桥学院工学系课程设计报告课程名称: Java 设计题目:加密与解密系别:工学系专业 (方向):信息管理与信息系统年级、班:2012级(2)班学生姓名:费亚芬学生学号:20120651208指导教师:张鑫2014年7 月1日目录一、系统开发的背景 (1)二、系统分析与设计 (1)(一)系统功能要求 (1)(二)系统模块结构设计 (2)三、系统的设计与实现 (2)(一)图形用户界面模块 (2)(二)加密操作模块 (3)(三)解密操作模块 (4)(四)文件保存模块 (4)(五)文件选择模块 (5)四、系统测试 (6)(一)测试加密 (6)(二)测试选择加密文件 (6)(三)测试生成加密文件 (6)(四)测试浏览加密文件 (7)(五)测试解密文件 (8)五、总结 (8)六、附件(代码、部分图表) (10)加密与解密一、系统开发的背景随着网络技术的不断发展,人们的个人信息、网络间的文件传递、电子商务等方面都需要大力的保护,文件加密技术也就随之产生。
文件的加密主要是由加密算法实现,加密算法有多种,本程序设计对文件的加密使用的是最基础的异或加密算法。
Java语言具有简单、安全、可移植、面向对象、健壮、多线程、体系结构中立、解释执行、高性能、分布式和动态等主要特点。
本程序充分利用Java语言的特点,针对当下社会比较重视的文件加密,设计了本程序。
使用本程序可以对txt,word等多种文件进行加密解密,使用便捷实用,功能完善,满足了用户对文件安全性的需求。
二、系统分析与设计(一)系统功能要求可以采用图形用户界面,给定任意一个文本文件,进行加密,生成另一个文件,然后对加密后的文件还原。
1、向图形用户界面中添加组件;2、设置各个组件的布局;3、添加窗口事件;4、查找读入及写入文件,并显示;5、加密功能实现;6、解密功能实现;(二)系统模块结构设计通过对系统功能的分析,加密与解密功能如图1所示。
图1 加密与解密功能图三、系统的设计与实现(一)图形用户界面模块分析:在图形用户界面,设置两个面板,并分别设置显示其组件的布局。
Java课程设计之加密和解密
课程设计(论文)任务书软件学院软件工程专业班一、课程设计(论文)题目加密与解密二、课程设计(论文)工作自年月日起至年月日止。
三、课程设计(论文) 地点:四、课程设计(论文)内容要求:1.本课程设计的目的(1)使学生巩固和提高Java编程技术(2)培养学生掌握程序设计的基本思路和方法;(3)加强学生研发、调试程序的能力;(4)培养学生分析、解决问题的能力;(5)提高学生的科技论文写作能力。
2.课程设计的任务及要求1)任务:(1)设计GUI界面的Hannoi塔,用户可以通过拖动鼠标移动各个塔上的盘子,程序也可以自动演示盘子的移动过程。
;(2)有三个表示塔的对象,分别命名为A、B和C。
A塔上有若干个盘子,盘子的大小不等,并按着大小顺序依次摆放在A塔上,大盘在下,小盘在上。
用户可以用鼠标拖动盘子,把A 塔上的盘子全部移动到另外两个塔中的任何一个塔上。
要求每次只能移动一个盘子,在任何时候不允许大盘压在小盘的上面。
(3)用户也可以选择让程序自动演示。
选择自动演示后,程序将以动画形式演示把A塔上的盘子全部移到C塔的过程,并将移动过程以文本形式显示在一个文本区中。
2)创新要求:在基本要求达到后,可进行创新设计,增加功能和游戏趣味性。
3)课程设计论文编写要求(1)课程设计任务及要求(2)需求分析(3)设计思路--工作原理、功能规划(4)详细设计---数据分析、算法思路、类设计、功能实现(含程序流程图、主要代码及注释)、界面等。
(4)运行调试与分析讨论---给出运行屏幕截图,分析运行结果,有何改进想法等。
(5)设计体会与小结---设计遇到的问题及解决办法,通过设计学到了哪些新知识,巩固了哪些知识,有哪些提高。
(6)参考文献(必须按标准格式列出,可参考教材后面的参考文献格式)(7) 报告按规定排版打印,要求装订平整,否则要求返工;(8) 课设报告的装订顺序如下:封面---任务书---中文摘要---目录----正文---附录(代码及相关图片)(9)严禁抄袭,如有发现,按不及格处理。
文件加密文件解密课程设计
文件加密文件解密课程设计一、课程目标知识目标:1. 学生能理解文件加密与解密的基本概念,掌握相关的理论知识。
2. 学生能掌握至少两种文件加密与解密的方法,并了解其原理和适用场景。
3. 学生能了解加密技术在信息安全管理中的重要性。
技能目标:1. 学生能够运用所学知识,使用相关工具或编程语言实现文件的加密与解密。
2. 学生能够分析不同的加密场景,选择合适的加密方法进行操作。
3. 学生能够通过实际操作,提高解决问题的能力和动手实践能力。
情感态度价值观目标:1. 学生能够认识到信息安全的重要性,增强网络安全意识。
2. 学生能够培养团队协作精神,通过小组讨论和实践,共同解决问题。
3. 学生能够培养创新思维,积极探索加密技术在实际生活中的应用。
课程性质:本课程为信息技术课程,旨在让学生掌握文件加密与解密的基本知识,提高信息安全意识。
学生特点:学生为八年级学生,对信息技术有一定的基础,具备基本的计算机操作能力,对新鲜事物充满好奇。
教学要求:结合学生特点,采用理论讲解与实际操作相结合的方式进行教学,注重培养学生的动手实践能力和创新思维。
在教学过程中,关注学生的个体差异,鼓励学生积极参与,提高课堂互动性。
通过课程学习,使学生能够达到上述课程目标,并在实际生活中应用所学知识。
二、教学内容1. 文件加密与解密基本概念:讲解加密、解密的定义,介绍加密技术在信息安全中的作用。
- 教材章节:第三章第五节《加密与解密技术》- 内容列举:加密技术发展简史,加密算法分类,加密与解密的基本过程。
2. 常用加密算法介绍:讲解对称加密和非对称加密的原理,以AES和RSA算法为例,分析其优缺点及应用场景。
- 教材章节:第三章第六节《常见加密算法》- 内容列举:AES算法原理,RSA算法原理,加密算法在实际应用中的选择。
3. 文件加密与解密操作实践:指导学生使用相关工具或编程语言实现文件的加密与解密。
- 教材章节:第三章第七节《加密与解密工具的使用》- 内容列举:工具软件介绍,编程语言实现加密与解密,实际操作步骤。
java文件加密解密课程设计
java文件加密解密课程设计一、课程目标知识目标:1. 学生理解Java语言文件I/O操作的基本原理;2. 学生掌握使用Java进行文件加密和解密的基础算法;3. 学生了解加密技术在现实生活中的应用及其重要性。
技能目标:- 学生能够运用所学知识,独立编写简单的Java程序完成文件的加密和解密操作;- 学生能够运用调试工具解决程序中出现的简单错误;- 学生通过实际操作,掌握将理论知识应用于实践中的方法。
情感态度价值观目标:- 学生培养对计算机编程的兴趣,增强学习Java语言的自信心;- 学生认识到信息安全的重要性,树立正确的网络安全意识;- 学生在小组合作中,培养团队协作精神,学会尊重他人意见,共同进步。
课程性质:本课程为信息技术选修课,以实践操作和理论相结合的方式进行教学。
学生特点:学生为高中二年级,已具备一定的Java编程基础,对新鲜事物充满好奇心,有一定的自主学习能力和探究精神。
教学要求:结合学生特点,课程注重理论与实践相结合,强调学生动手实践能力,通过分组讨论和项目式学习,提高学生的综合素质。
教学过程中,将目标分解为具体可操作的学习任务,确保学生能够达到预定的学习成果,为后续的深入学习打下坚实基础。
二、教学内容1. 文件I/O操作原理复习:回顾Java中文件读写的相关类和方法,重点掌握FileInputStream、FileOutputStream、BufferedReader、BufferedWriter 等类的使用。
- 教材章节:第三章 Java基本I/O流。
2. 加密算法基础:介绍基本的加密算法,如异或加密、移位加密等,分析算法原理和实现方法。
- 教材章节:第七章 数据加密与安全。
3. Java加密解密实现:利用Java语言实现文件的加密和解密,结合实践案例,让学生动手编写程序。
- 教材章节:第七章 数据加密与安全,第十章 Java多线程和网络编程(加密通信)。
4. 加密技术应用:分析加密技术在生活中的应用,如网络安全、数据保护等。
java文件加密课程设计
结业报告课程名称:网络安全技术设计题目:java实现文件加密系别: ***学院专业:***************组员:************************** 起止日期*****************指导教师:***摘要目前世界范围内的信息安全问题越来越严重。
解决信息安全问题涉及面很广,它包括技术,管理.制度,人员和法律等诸多方面,但最核心部分是密码技术。
密码技术是实现一种变换,它使得对大量信息的保护变为对少量密钥的保护。
本次结业设计以文件的加密与解密问题为主要研究讨论方向。
先对加密技术进行查找资料。
然后对加密方法进行概述,而后对3DES加密进行详细介绍何分析,并对结业设计成果进行演示,最后附上代码。
由于本次结业设计时间仓促外加能力有限,有诸多不足之处以及可能存在某些为发现错误还请批评指正。
感谢之至。
关键词:加密解密密钥 3DESAbstractAt present, the problem of information security is more and more serious in the world. To solve the problem of information security involves a wide range, including technology, management, system, personnel and law, etc., but the most important part is the password technology. Password technology is to achieve a transformation, which makes the protection of a large number of information into a small number of key protection.The graduation project to document encryption and decryption issues as the main research and discussion. First, the encryption technology to find information. Then the encryption method is outlined, and then the 3DES encryption for detailed analysis, and the completion of the design results are demonstrated, and finally attached to the code. Due to the limited capacity of the completion of this graduation project, there are many deficiencies and there may be some to find errors also please criticism. Thanks to.目录ABSTRACT ....................................................................................................................................... - 2 -一.背景分析..................................................................................................................................... - 1 -二.DES算法 .................................................................................................................................. - 1 -2.1DES算法思想. (1)2.2DES算法原理 (2)2.3两个密钥的三重DES (3)2.4J A V A语言编程实现DES算法 (3)三.调试结果与说明......................................................................................................................... - 5 -四.课程设计总结与体会................................................................................................................. - 7 -参考文献............................................................................................................................................. - 7 -代码附录:......................................................................................................................................... - 8 -项目总体分工一.背景分析随着Internet 的高速发展,很多日常工作和数据传输都放在Internet 网上进行,大大提高了效率,降低了成本,创造了良好的效益。
加密与解密JAVA课程设计
加密与解密JAVA课程设计一、课程目标知识目标:1. 学生能理解加密与解密的基本概念,掌握Java语言中加密解密技术的基本原理;2. 学生能掌握并运用Java语言实现常用的加密算法,如AES、DES等;3. 学生了解加密技术在网络安全中的应用,知道如何保障数据传输的安全性。
技能目标:1. 学生能运用Java编程实现简单的加密解密程序,具备解决实际问题的能力;2. 学生能通过查阅资料,掌握加密解密技术的最新发展,提高自学能力;3. 学生能在团队项目中,与他人协作共同完成加密解密功能的开发,提高团队协作能力。
情感态度价值观目标:1. 学生通过学习加密解密技术,增强网络安全意识,树立正确的网络道德观念;2. 学生在解决实际问题的过程中,培养勇于挑战、积极探索的精神;3. 学生在团队协作中,学会相互尊重、沟通与协作,培养集体荣誉感。
本课程旨在帮助学生掌握Java语言中的加密解密技术,培养学生在网络安全领域的实际操作能力,同时提高学生的团队协作和自主学习能力。
课程针对学生的年龄特点和知识水平,注重理论与实践相结合,使学生能够学以致用,提高解决实际问题的能力。
在教学过程中,关注学生的情感态度价值观培养,引导他们树立正确的网络安全观念,成为具有高度社会责任感和创新精神的优秀人才。
二、教学内容本章节教学内容主要包括以下三个方面:1. 加密解密基本概念及原理- 引导学生理解加密解密的基本概念、目的和作用;- 介绍常用的加密算法,如AES、DES等,分析其原理和特点;- 结合课本相关章节,讲解Java语言中加密解密技术的应用。
2. Java加密解密技术实践- 安排实践环节,让学生动手编写Java程序,实现AES、DES等加密算法;- 指导学生运用Java API,如javax.crypto等,进行加密解密操作;- 结合实际案例,讲解加密技术在网络安全中的应用。
3. 团队项目及拓展学习- 设定团队项目,要求学生分组完成一个具有加密解密功能的Java应用程序;- 鼓励学生查阅相关资料,了解加密解密技术的最新发展,进行拓展学习;- 在项目实施过程中,培养学生团队协作、沟通与解决问题的能力。
文件加密与解密Java课程设计报告
文件加密与解密Java课程设计报告JAVA课程设计题目:文件的加密与解密姓名:学号:班级:日期:目录一、设计思路 (3)二、具体实现 (3)三、运行调试与分析讨论 (9)四、设计体会与小结 (12)五、参考文献 (13)六、附录 (14)一、设计思路自从Java技术出现以业,有关Java平台的安全性用由Java技术发展所引发的安全性问题,引起了越来越多的关注。
当前,Java已经大量应用于各个领域,研究Java的安全性对于更好地利用Java具有深远的意义。
使用Java的安全机制设计和实现安全系统更具有重要的应用价值。
本课程设计,主要实践Java安全中的JCE模块,包括密钥生成,Cipher对象初始化、加密模式、填充模式、底层算法参数传递,也涉及文件读写与对象输入输出流。
二、具体实现本系统经过用户界面接收三个参数:明文文件、密文文件、口令。
采用DES加密算法,密码分组链(Cipher Block Chaining,CBC)加密模式,PKCS#5-Padding的分组填充算法。
因为CBC涉及到底层算法参数的解密密钥的传递,因此将明文文件中的字节块以密封对象(Sealed Object)的方式加密后,用对象流输出到密文文件,这样就将密文、算法参数、解密密钥三都密封到一个对象中了。
口令的hash值作为产生密钥的参数。
设计流程图如下所示:文件加密与解密设计流程图本系统中,包含Default,Shares,SecretKey,EncAndDec四个包共6个类组成。
定义的几个参数:MAX_BUF_SIZE为每次从文件中读取的字节数,也是内存缓冲区的大小;加密算法为DES;加密模式是密码分组链(CBC)模式;分组填充方式是PKCS#5Padding。
包和类结构图如下所示:本课程设计,包和类结构图:。
JAVA文本文档的加密与解密
关键词: JAVA ; 加密; 解密;
3
兰州理工大学课程设计 目录
一、课设任务及要求...................................................................................................................................... 2 二、需求分析...................................................................................................................................................2 三、设计思路...................................................................................................................................................2 四、详细设计...................................................................................................................................................3
五、运行调试与分析讨论.............................................................................................................................. 7
Java课程设计报告 加密和解密
目录:之五兆芳芳创作前言1一、题目阐发21.1课程设计的要求和内容(包含原始数据、技巧要求、任务要求)21.2 团队任务阐发 (2)二、概要设计32.2各程序模块之间的条理(调用)关系4三、详细设计53.1程序流程图573.6文件选择模块8四、调试阐发91五、测试结果125.1加密125.2解密15六、主要参考资料16七、附录16前言随着网络技巧的不竭成长,人们的团体信息、网络间的文件传递、电子商务等方面都需要大力的庇护,文件加密技巧也就随之产生.文件的加密主要是由加密算法实现,加密算法有多种,罕有的有RSA、DES、MD5等.但是这些算法虽然原理复杂,但具体实现起来却很是繁琐庞杂,故而本程序设计对文件的加密使用的是最根本的异或加密算法.Java语言具有复杂、平安、可移植、面向对象、强健、多线程、体系结构中立、解释执行、高性能、散布式和动态等主要特点.Java是一门很优秀的编程语言,是目前软件设计中极其强健的编程语言.Java不但可以用来开发大型的应用程序,并且特别适合于Internet的应用开发.Java确实具备了“一次写成,处处运行”的特点,所以,Java已经成为网络时代最重要的编程语言之一.本程序充分利用Java语言的特点,针对当下社会比较重视的文件加密,设计了本程序.使用本程序可以对txt,word等多种文件进行加密解密,使用便捷实用,功效完善,满足了用户对文件平安性的需求.关头词:JAVA ;加密;解密;一、题目阐发课程设计的要求和内容(包含原始数据、技巧要求、任务要求)根本要求:1.用图形用户界面实现,成立菜单.2. 给定任意一个文本文件,进行加密,生成另一个文件.3.对加密后的文件复原.团队任务阐发阐发如下:1.向图形用户界面中添加组件.2.设置各个组件的计划.3.添加窗口事件.4. 查找读入及写入文件,并显示.5.加密功效实现.6.解密功效实现.其中:团队成员及其担任的任务如下:冯治波:图形用户界面吴祎筱和陈冬姣:文本加密高大辉:文本的复原(解密)相关知识介绍本程序采取传统的异或加密算法,没有采取DES算法,但对于世界上公认的DES是一种分组加密算法,是以64位为分组对数据加密.64位一组的明文从算法的一端输入,64位的密文从另一端输出.密钥的长度为56位(密钥通常暗示为64位的数,但每个第8位都用作奇偶查验,可以忽略).密钥可以是任意的56位数,且可以在任意的时候改动. 本程序采取的算法与DES相同的一点是:都是一个对称算法:及加密息争密用的是同一个算法.我们也许知道公认的DES算法的任务进程,那就是:若Mode为加密,则用Key对数据Data进行加密,生成Data的密码形式(64位)作为DES的输出结果;若Mode 为解密,则用Key对密码形式的数据Data解密,还原为Data的明码形式(64位)作为DES的输出结果.但是,重要的是本程序首先经“打开”菜单项,进入文件选择模块,读取字符流,输出文本文档后,在一个数组中,对字符进行异或运算,从而达到加密的效果.在通信网络的两端,双方约定了一致的Key,在通信的源点用Key对焦点数据进行DES加密,然后以密码形式通过公共通信网(如电话网)传输到通信网络的终点,数据达到目的地后,用同样的Key对密码数据进行解密,便再现了明码形式的焦点数据.这样便包管了核心数据(如PIN,MAC等)在公共通信网中传输的平安性和可靠性.通过定期在通信网络的源端和目的端同时改用新的Key,便能更进一步提高数据的保密性,这正是现在金融界买卖网络的流行作法. 复杂地说,DES算法只不过是加密的其中一种技巧,通过一个初始置换,将明文分组分红左半部分和右半部分,各32位长.然落后行16轮相同的运算,这些相同的运算被称为函数f,在运算进程中数据和密钥相结合.经过16轮运算后左、右部分在一起经过一个置换(初始置换的逆置换),这样算法就完成了. 本程序虽然没有采取此算法,而是采取众所周知的与DES有相似之处的异或算法,实际上是下降了程序的庞杂度,使其更清晰,但功效依旧很强大,可见优势也是良多的.二、概要设计抽象数据类型的定义2.1.1 程序所需要引入的包:import java.awt.*; //包含用于创建用户界面和绘制图形图像的所有类.import java.awt.event.*; //提供处理由 AWT 组件所激起的各类事件的接口和类.import javax.swing.*; //提供一组“轻量级”(全部是 Java语言)组件,尽量让这些组件在所有平台上的任务方法都相同.import java.io.*; //通过数据流、序列化和文件系统提供系统输入和输出.2.1.2 其他定义:new FlowLayout() 对文件加密器对话框采取FlowLayout 办理器.new ActionListener() 对文件的加密息争密设置事件监听器.各程序模块之间的条理(调用)关系2.2.1 模块定义图形用户界面模块:添加各类所需组件,设置窗口事件.加密操纵模块:按照选择的文本文件,在浏览窗口中显示后,进行加密,显示在“文本浏览窗口”中.解密操纵模块:同加密模块一样,由密文的保管路径,打开,进行解密,显示在“文本浏览窗口”中.文件选择模块:选择需要加密或解密的文件.文件保管模块:选择保管路径,保管需要加密或解密的文件.条理(调用)关系按照以上各程序模块的定义,可以大致画出各模块的条理调用关系,由文件加密器模块开始调用,直到解密模块调用为止.如下图2-2-2所示.图2-2-2 条理(调用)关系三、详细设计该程序的模块调用十分复杂明了,所以主程序的运行也很清晰,以下就是主程序的详细流程图,如图3-1所示图3-1 主程序流程图在图形用户界面,设置两个面板,并辨别设置显示其组件的计划.设置两个菜单项,辨别为“打开”和“保管”;设置两个按钮,辨别为“加密”和“解密”;创建一个文本区,用一个标签注明“文件浏览窗口”,这就是整个图形用户界面.此外,还添加了一个窗口事件windowClosing,可以封闭运行的程序.窗口事件的代码实现:addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}本程序采取复杂的加密算法,即把从文本区取得的文本文件,初始化,存放到一个数组中,然落后行异或运算,把结果重新存放于该数组中,从而显现在“文件浏览窗口”中.代码实现:if(e.getSource()==button1){char a[]=texta.getText().toCharArray();/*把texta中取得的文本,进行初始化,与原字符串长度相等,并将该字符串对象的全部字符复制到该数组a[]中*/texta.setText(null);int n;char secret=' ';for(int i=0;i<a.length;i++){char c=(char)(secret^a[i]);//进行异或运算texta.append(""+c);}}解密操纵其实同加密操纵相同,依旧首先打开加密后的文件,使其显示在文本区中,再同样对数组里的元素进行初始化,进行异或运算,便可得到解密后的文件,再显示到“文件浏览窗口”中.入口参数:指定文件路径代码实现:if(e.getSource()==button2){char a[]=texta.getText().toCharArray();texta.setText(null);int n;char secret=' ';for(int i=0;i<a.length;i++){char c=(char)(secret^a[i]);//再次异或运算,即复原texta.append(""+c);}}本程序最大的特点就是:可以选择是否保管加密后的文本文件.因为加密后的文件先显示在文本区中,之后选择菜单项“保管”,便可弹出“保管对话框”,进行查找写入文件,写入字符流,从而实现保管.代码实现:if(e.getSource()==itemSave)//查找写入的文件{filedialog_save.setVisible(true);if(filedialog_save.getFile()!=null){try{File file=new File(filedialog_save.getDirectory(),filedialog_save.getFile()); FileWriter tofile=new FileWriter(file);//写入字符流BufferedWriter out=new BufferedWriter(tofile);out.write(texta.getText(),0,(texta.getText()).length());out.close();tofile.close();}catch (IOException e2){}}}同上个文件保管模块类似,依旧在选择菜单项“打开”后,查找读入文件,读取字符流,弹出“打开对话框”,从而可实现获得文件.出口值:被选文件的路径代码实现:public void actionPerformed(ActionEvent e)//查找读入文件{if(e.getSource()==itemOpen){filedialog_load.setVisible(true);texta.setText(null);String s;if(filedialog_load.getFile()!=null){try{File file=new File(filedialog_load.getDirectory(),filedialog_load.getFile()); FileReader file_reader=new FileReader(file);//读取字符流BufferedReader in=new BufferedReader(file_reader);while((s=in.readLine())!=null)texta.append(s+'\n');in.close();file_reader.close();}catch (IOException e1){}}}四、调试阐发对设计与实现的回首讨论和阐发在程序设计之初,考虑的是如何实现DES算法,但发明DES算法对于本次小程序来说,的确过于繁琐,但当我们发明采取简化后的DES算法----异或算法也可实现本功效,所以以后大大削减了任务量,可以说用Java语言是程序实现的一个成功之处.Java语言具有复杂、平安、可移植、面向对象、强健、多线程、体系结构中立、解释执行、高性能、散布式和动态等主要特点.并且,我觉得随着科技的不竭进步,Java语言的优越性会不竭地被挖掘出来,因为Java语言也是有生命的,它是不竭被人们的需求演变的越来越强大,这些,我觉得不问可知.但往后,我想只有在不竭的使用以后才干体会到,在发明Java拥有秘密密钥工场后更是感触感染到它的强大.Java的JDK帮忙文档对于使用Java编程是很是有帮忙的,在我们编程进程中,遇到的一些不清楚的地方,都是靠它才得以解决,同时对Java语言的了解也更便利、深入了.程序利用Java图形界面设计了一个便利用户操纵的窗口,使得程序运行的时候更想是个封装好的运用程序,不过我知道离这个仍是有很大距离的,而程序所要提升空间很是大,现在界面所能实现的也就几个操纵罢了.但我们一致认为:如果程序要再做的强大点,可以引入其他的加密算法共用户选择,还可以设计成同时对多个文件进行加密,不过这只能放到我们课下对此进行更深一步的研究了.程序的每个模块实现的功效还算完整,条理间的调用仍是比较清晰的,各个功效也得到了根本的实现.算法的时空阐发算法的时空阐发,其实就是指算法的空间庞杂度(包含时间庞杂度和空间庞杂度),其作用:时间庞杂度是度量算法执行的时间长短;而空间庞杂度是度量算法所需存储空间的大小.程序的时间庞杂度理论上是算不出来的,必须经过必须上机运行测试才干知道.但我们不成能也没有需要对每个算法都上机测试.但我们可以知道本算法其实是DES算法的简化,所以,肯定只需知道哪个算法破费的时间多,哪个算法破费的时间少就可以了,并且,一个算法破费的时间与算法中语句的执行次数成正比例,DES对64位的明文分组进行操纵,通过一个初始置换,将明文分组成左半部分Li和右半部分Ri,各32位长.然落后行16轮完全相同的运算,本程序直接采取数组,对其中的字符循环异或,只需进行一轮,所以时间庞杂度T(n)是比较小的.空间庞杂度O(n)也是一样的,它是对程序占用内存的阐发,由公式T(n)=O (f(n))知,时间庞杂度与空间庞杂度均为O(n).4.3 经验和体会这次课程设计的要求其实未几,只要实现加密与解密功效,并且只需要采取一种加密算法,但是为了本次课程设计,我们组也搜索了大量的资料,并按照在课堂上,书本上,老师讲过的知识,结合自身主不雅和客不雅因素,制定了本次课程设计的目标,并齐心协力,完成了此次设计.通过本次的课程设计,我们还知道了许多自身存在的缺乏,例如仅掌握了一种加密算法,但在日益发财的社谈判业等领域,加密解密需要做的还很是多,并且Java领域博识精深,我们现在只是学到了它的一点皮毛罢了,所以还需多多努力.但是通过这些我仍是学到了良多东西,先不说其他的,我最起码最根本的加密算法,并且以后可以运用到自己想要保密的文件当中去.通过这次课程设计,我用JAVA语言实现,我这是我对JAVA语言有了根深的了解稳固了以前学到的知识,也学习到了新的知识,课程设计虽然暂告一个段落,但我们学习Java的程序不会终止.五、测试结果5.1 加密首先在我机械C盘文件夹名为1的文件夹离创建一个名为Example.txt文本文件用做测试.运行程序,弹出如图5-1-1的对话框图 5-1-1 运行程序点击“文件”,选择“打开”,即弹出“打开”对话框,选择一个文本文件,如图5-1-2.图 5-1-2 选择加密文件选择文件后,便可在“文件浏览窗口”中显示文本的信息,点击“加密”按钮,便可在“文件浏览窗口”看到加密后的文件(如图5-1-3).图 5-1-3 生成加密文件对加密后的密文进行保管,选择“文件”下的“保管”,便可弹出“保管”对话框,选择路径,便可保管,如图5-1-4和5-1-5所示.图 5-1-4 保管加密文件图 5-1-5 浏览加密文件5.2 解密解密操纵中对文件选择,密码输入和加密操纵是一样的.将方才加密的程序进行解密,打开密文文件,选择“加密与解密”窗口下“解密”按钮,点击,便可解密,如图5-2所示.图 5-2 生成解密文件六、主要参考资料1 《Java语言程序设计教程》邱桃荣机械产业出版社2 《Java程序设计试验指导》陈轶姚晓昆清华大学出版社34 耿祥义等.Java实用教程(第三版).北京:清华大学出版社,2006.85埃克尔. Java编程思想(第4版).北京:机械产业出版社,2007.66通过互连网检索相关资料.七、附录源代码:import java.awt.*;import java.awt.event.*;import java.io.*;import javax.swing.*;class Myframe extends Frame implements ActionListener{FileDialog filedialog_save,filedialog_load;Button button1,button2;Label label;MenuBar bar;Menu menu;MenuItem itemOpen,itemSave;TextArea texta;Myframe(String s) //创建对话框{super(s);texta= new TextArea(38,160);button1= new Button("加密");button2= new Button("解密");menu=new Menu("文件");itemOpen=new MenuItem("打开");itemSave=new MenuItem("保管");label=new Label("文件浏览窗口");itemOpen.addActionListener(this);itemSave.addActionListener(this);button1.addActionListener(this);button2.addActionListener(this);filedialog_save=new FileDialog(this,"保管文件对话框",FileDialog.SAVE);filedialog_load=new FileDialog(this,"打开文件对话框",FileDialog.LOAD);filedialog_save.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){filedialog_save.setVisible(false);}});filedialog_load.addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){filedialog_load.setVisible(false);}});Box box1=Box.createHorizontalBox();//创建一个从左到右显示其组件的 box1;Box box2=Box.createVerticalBox();//创建一个从上到下显示其组件的 box2;Box box3=Box.createVerticalBox();Box boxbase=Box.createVerticalBox();Panel panel1=new Panel();Panel panel2=new Panel();setMenuBar(bar=new MenuBar());bar.add(menu);menu.add(itemOpen);menu.add(itemSave);panel1.add(button1);panel1.add(button2);box1.add(panel1);box2.add(label);panel2.add(texta);box3.add(panel2);boxbase.add(box1);boxbase.add(box2);boxbase.add(box3);add(boxbase);setLayout(new FlowLayout());setBounds(100,0,1200,750);setVisible(true);addWindowListener(new WindowAdapter(){public void windowClosing(WindowEvent e){System.exit(0);}});}//“封闭”窗口事件;public void actionPerformed(ActionEvent e)//查找读入文件{if(e.getSource()==itemOpen){filedialog_load.setVisible(true);texta.setText(null);String s;if(filedialog_load.getFile()!=null){try{File file=new File(filedialog_load.getDirectory(),filedialog_load.getFile()); FileReader file_reader=new FileReader(file);//读取字符流BufferedReader in=new BufferedReader(file_reader);while((s=in.readLine())!=null)texta.append(s+'\n');in.close();file_reader.close();}catch (IOException e1){}}}if(e.getSource()==itemSave)//查找写入的文件{filedialog_save.setVisible(true);if(filedialog_save.getFile()!=null){try{File file=new File(filedialog_save.getDirectory(),filedialog_save.getFile()); FileWriter tofile=new FileWriter(file);//读取字符流BufferedWriter out=new BufferedWriter(tofile);out.write(texta.getText(),0,(texta.getText()).length());out.close();tofile.close();}catch (IOException e2){}}}if(e.getSource()==button1){char a[]=texta.getText().toCharArray();/*把texta中取得的文本,进行初始化,与原字符串长度相等,并将该字符串对象的全部字符复制到该数组a[]中*/texta.setText(null);int n;char secret=' ';for(int i=0;i<a.length;i++){char c=(char)(secret^a[i]);//进行异或运算texta.append(""+c);}}if(e.getSource()==button2){char a[]=texta.getText().toCharArray();texta.setText(null);int n;char secret=' ';for(int i=0;i<a.length;i++){char c=(char)(secret^a[i]);//再次异或运算,即复原texta.append(""+c);}}}}public class E1{public static void main(String args[]){Myframe frame = new Myframe("加密与解密"); }}。
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
文件加密与解密—Java课程设计报告JAVA课程设计题目:文件的加密与解密姓名:学号:班级: 日期:指导老师分数目录一、设计思路 (1)二、具体实现 (1)三、运行调试与分析讨论 (3)四、设计体会与小结 (7)五、参考文献 (8)六、附录 (8)一、设计思路自从Java技术出现以业,有关Java平台的安全性用由Java技术发展所引发的安全性问题,引起了越来越多的关注。
目前,Java 已经大量应用于各个领域,研究Java的安全性对于更好地利用Java具有深远的意义。
使用Java的安全机制设计和实现安全系统更具有重要的应用价值。
本课程设计,主要实践Java安全中的JCE模块,包括密钥生成,Cipher对象初始化、加密模式、填充模式、底层算法参数传递,也涉及文件读写与对象输入输出流。
二、具体实现本系统通过用户界面接收三个参数:明文文件、密文文件、口令。
采用DES加密算法,密码分组链(Cipher Block Chaining,CBC)加密模式,PKCS#5-Padding的分组填充算法。
因为CBC涉及到底层算法参数的解密密钥的传递,所以将明文文件中的字节块以密封对象(Sealed Object)的方式加密后,用对象流输出到密文文件,这样就将密文、算法参数、解密密钥三都密封到一个对象中了。
口令的hash值作为产生密钥的参数。
设计流程图如下所示:设计文件加密解密的界面实现hash算法,用于产生口令的hash值实现由口令hash值产生密钥的算法实现文件加密算法加密按钮事件实现文件解密算法解密按钮事件文件加密与解密设计流程图本系统中,包含Default,Shares,SecretKey,EncAndDec四个包共6个类组成。
定义的几个参数:MAX_BUF_SIZE为每次从文件中读取的字节数,也是内存缓冲区的大小;加密算法为DES;加密模式是密码分组链(CBC)模式;分组填充方式是PKCS#5Padding。
包和类结构图如下所示:本课程设计,包和类结构图:Package Default -> Class JCEDialog//文件加密解密窗口类Package Shares -> Class HashDigest、Class byte2hex//密码Hash值生成类、二进制转字符串类Package SecretKey -> Class GenerateKey//由密码Hash值生成秘密密钥类Package EncAndDec -> Class Dec、Class Enc//文件加密、解密类以下为包中的类的方法实现说明Package Shares类结构图Package Sharespublic class HashDigest 密码Hash值生成方类,使用默认构造方法。
public byte[] HashDigest(String StrPassword) 密码Hash值生成方法MessageDigest对象生成,使用类的getInstance(String DigestAlgorithm)方法。
1)输入产生摘要的原始数据,使用报文摘要对象MesDigest的update方法,接收byte[]类型的输入,因此需要交String类型预先转化为byte[]类型。
2)报文摘要的产生可以直接调用报文摘要对象MesDigest的digest方法,也可以将输入的byte[]类型作为参数而省去update方法调用。
public class byte2hex 二进制转字符串类public String byte2hex(byte[] b) 该方法接收byte[]类型的二进制数据。
将二进制数据转为字符串,以便于观察和对比,便于调试程序。
Package SecretKey类结构图Package SecretKeypublic class GenerateKey 由密码Hash值生成秘密密钥类,使用默认构造方法。
Public SecretKey GenerateKey(byte [] KeyData) 由密码Hash值生成秘密密钥方法(由hashDigest算法产生byte[]类型的hash值,再由此hash值生成对称密钥的算法)算法中用到了两个重要的类1)DESKeySpec,是密码服务提供者“SunJCE”支持的一种DES密钥透明表示,即以适当的格式表示的DES密钥的底层元素。
本设计中以输入密钥的hash 值生成DESKeySpec 对象。
2)SecretKeyFactory 是一种密钥转换机制,用于密钥(Key,java.security.k ey 类型的不透明密钥)与密钥规范(key specification,符合适当的底层密钥元素的透明表示)之间的互相转换。
SecretKeyFactory仅作用于秘密密钥(对称密钥),它用于由key specification(DESKeySpec)生成Key(SecretKey)。
Package EncAndDec类结构图Package EncAndDecpublic class Enc 文件加密类,使用默认构造方法public boolean EncryptFile(SecretKey SecKey1,String PlainFilePath1,String CipherFilePath1) 文件加密方法,该加密的流程如图-文件加密流程图所示。
该过程采用DES块加密算法、密码分组(CBC)加密模式、PKCS#5Padding填充方式。
CBC模式需要传递底层算法参数和解密密钥,而SealedObject是解决底层算法参数传递的理想方案与关键。
public class Dec 文件解密类,使用默认构造方法public boolean EncryptFile(SecretKey SecKey2,String PlainFilePath2,String CipherFilePath2) 文件解密是文件加密的逆过程,接收相同的三个入口参数,所使用的对象与API有很多相似的关联,其流程与实现只有少数不同之处1)文件解密以对象输入流(ObjcetInputStream)从密文文件中读取密文对象,用普通文件输出流(FileOutputStream)将解密后的明文文件。
2)解密使用参数SecKey2作用于密文文件中的SealdObject。
Cipher对象和底层算法参数都封装在SealdeObject中,解密语句:buffer2=(byte[])SealedObj2.getObject(SecKey2);将密文从读取的SealdeObj2中用解密密钥SecKey2解密出来,解密后的明文暂存于buffer2。
接收参数:秘密密钥,明文路径,密文路径生成加密Cipher对象,用“秘密密钥”将该对象初始化为加密模式(ENCRYPT_MODE)生成明文文件对象,密文文件对象Yes明文文件是否为空退出No生成文件输入流,对象输出流从明文文件中读取大小为MAX_BUF_SIZE的字节块到内存中buffer1Yes读取文件是否成功文件读完,关闭文件流退出No对buffer1跌明文加密,生成密封对象SealedObject,将密文、算法参数、加密对象封装在一起将密文(SealedObject)用对象输出流写入密文文件图1 文件加密流程图文件加密与解密窗口类结构图:Public class JCEDialog extends JDialog//文件加密解密窗口类Final int MAX_BUF_SIZE=1024;String Algorithm=”DES”;String EncryptMode=”CBC”;String PaddingScheme=”PKCS5Padding”; Import Shares.* Public byet[] HashDigest(String StrPassword)//Shares包,HashDigest类,密码Hash值生成方法Import SecretKey.* Public SecretKey GenerateKey(byte[] KeyData)//SecreKey包,GenerateKey类,由密码Hash值生成秘密密钥方法Import EncAndDec.* Public boolen EncryptFile(SecretKey SecKey1,String PlainFilePath1,String CipherFilePath1)// EncAndDec包,Enc类,文件加密方法Import EnAndDec.* Public boolen DecryptFile(SecretKey SecKey2,String PlainFilePath2,String CipherFilePath2)// EncAndDec包,Dec类,文件解密方法public static void main (String[] args)//窗口类主方法体btnEncrypt.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e){}}//加密按钮事件btnDecrypt.addActionListener(new ActionListener() {public void actionPerformed(ActionEvent e) {} }//解密按钮事件三、运行调试与分析讨论系统的详细设计代码请查阅附带的代码。
以下仅对各个界面进行截图展示:图2系统主界面图 4 文件加密界面图 5 文件解密界面图 6 待加密文件Plain1.txt图7 Plain1.txt加密后的文件Cipher.txt图8 密文文件Cipher.txt解密后的明文文件Plain2.txt运行JA V A程序中,显示系统的主界面,如图三所示,主界面有进入其他子功能的按钮,选择相应的按钮便可进入相应的功能。
加密功能如图四所示,根据提示输入要加密的明文文件路径、密文文件路径,点击加密,若加密成功将弹出提示框,提示加密成功否则提示解密失败。
解密功能如图五所示,根据提示输入要解密的密文文件路径、明文文件路径。
点击解密,若解密成功将弹出提示框,提示解密成功否则提示解密失败。
图6-图8为加密与解密文件的效果图。
四、设计体会与小结本次Java课程设计,自己通过查找资料、复习课本、编程调试,写实验报告等环节,进一步掌握了以前学到的知识,并且还学习到Java 密码扩展服务(Java Cryptography Extension,JCE)。
JCE为加密解密,密钥产生与分配、消息认证码(Message Authentication Code)算法提供框架与实现,支持对称加密、非对称加密、块加密与流加密,也支持安全流与密封对象。