要求在file.1.txt 中存放原始文件,file.2.txt 中存放加密文件 file.3.txt存放解密文件
所有代碼:
package 課程設計;
import javax.swing.*;
import java.util.*;
import java.io.*;
import java.awt.*;
import java.awt.event.*;
class EncFile
{
private static final int numOfEncAndDec = 0x999; //加密解密祕鑰
private static int dataOfFile = 0; // 文件字節內容
public EncFile(File srcFile, File encFile) throws Exception {
if(!srcFile.exists()){
System.out.println("初始文件不存在");
System.out.println("創建文件!");
System.out.println("創建成功!");
srcFile.createNewFile();
}
FileOutputStream src_fos = new FileOutputStream(srcFile);
OutputStreamWriter src_writer = new OutputStreamWriter(src_fos,"utf-8");
Scanner sc=new Scanner(System.in);
System.out.println("請輸入想要加密的文件內容:");
String s=sc.nextLine();
src_writer.write(s);
src_writer.close();
src_fos.close();
if(!encFile.exists()){
System.out.println("加密文件不存在");
System.out.println("創建文件!");
System.out.println("創建成功!");
encFile.createNewFile();
}
InputStream fis = new FileInputStream(srcFile);
OutputStream fos = new FileOutputStream(encFile);
while ((dataOfFile = fis.read()) > -1) {
fos.write(dataOfFile^numOfEncAndDec);
}
System.out.println("加密成功...");
fis.close();
fos.flush();
fos.close();
}
}
class DecFile
{
private static final int numOfEncAndDec = 0x999; //加密解密祕鑰
private static int dataOfFile = 0; // 文件字節內容
public DecFile(File encFile, File decFile) throws Exception {
if(!encFile.exists()){
System.out.println("加密文件不存在");
System.out.println("創建文件!");
System.out.println("創建成功!");
return;
}
if(!decFile.exists()){
System.out.println("已創建解密文件");
decFile.createNewFile();
}
InputStream fis = new FileInputStream(encFile);
OutputStream fos = new FileOutputStream(decFile);
while ((dataOfFile = fis.read()) > -1) {
fos.write(dataOfFile^numOfEncAndDec);
}
//創建一個帶緩衝區的輸入流
FileInputStream bis = new FileInputStream(decFile);
InputStreamReader reader = new InputStreamReader(bis,"utf-8");
BufferedReader bufferedReader = new BufferedReader(reader);
String line;
System.out.print("解密文件內容:");
while((line=bufferedReader.readLine())!=null){
System.out.println(line);
}
bufferedReader.close();
System.out.println("解密成功...");
fis.close();
fos.flush();
fos.close();
}
}
class chakan
{
public chakan(File a)throws Exception
{
FileInputStream bis = new FileInputStream(a);
InputStreamReader reader = new InputStreamReader(bis,"utf-8");
BufferedReader bufferedReader = new BufferedReader(reader);
String line;
while((line=bufferedReader.readLine())!=null){
System.out.println(line);
}
bufferedReader.close();
}
}
class shuchu
{
public static void speak(int n)
{
File srcFile = new File("D:/File.1.txt"); //初始文件
File encFile = new File("D:/File.2.txt"); //加密文件
File decFile = new File("D:/File.3.txt"); //解密文件
File miFile = new File("D:/密碼.txt");
try {
if(n==1)
{
EncFile En=new EncFile(srcFile,encFile);
}
else if(n==2)
{
DecFile De=new DecFile(encFile, decFile);
}
else if(n==3)
{
System.out.println("原始文件內容爲:");
chakan ck=new chakan(srcFile);
}
else if(n==4)
{
System.out.println("加密文件內容爲:");
chakan cp=new chakan(encFile);
}
else if(n==5)
{
System.out.println("解密文件內容爲:");
chakan ch=new chakan(decFile);
}
else if(n==6)
{
gaimi gm=new gaimi(miFile);
}
else
System.out.println(" 請輸入正確選項");
} catch (Exception e) {
e.printStackTrace();
}
}
}
class gaimi
{
public gaimi(File miFile )throws Exception
{
FileWriter in=new FileWriter(miFile);
Scanner sc=new Scanner(System.in);
System.out.println("請輸入修改後的密碼:");
int n=sc.nextInt()+48;
in.write(n);
System.out.println("修改成功!");
in.close();
}
}
public class 文件加密 {
private static final int numOfEncAndDec = 0x999; //加密解密祕鑰
private static int dataOfFile = 0; // 文件字節內容
private static void createAndShowGUI()
{
JFrame f=new JFrame("文件加密系統");
f.setLayout(new FlowLayout(FlowLayout.LEFT,20,30));
f.setSize(400,400);
f.setLocation(400,300);
JButton but1=new JButton("1:加密文件");
JButton but2=new JButton("2:解密文件");
JButton but3=new JButton("3:顯示原始文件內容");
JButton but4=new JButton("4:顯示加密文件內容");
JButton but5=new JButton("5:顯示解密文件內容");
JButton but6=new JButton("6:修改密碼");
JButton but7=new JButton("7:退出軟件");
but1.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
shuchu sc= new shuchu();
sc.speak(1);
}
}
);
but2.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
shuchu sc= new shuchu();
sc.speak(2);
}
}
);
but3.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
shuchu sc= new shuchu();
sc.speak(3);
}
}
);
but4.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
shuchu sc= new shuchu();
sc.speak(4);
}
}
);
but5.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
shuchu sc= new shuchu();
sc.speak(5);
}
}
);
but6.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
shuchu sc= new shuchu();
sc.speak(6);
}
}
);
but7.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e) {
System.exit(0);
}
}
);
f.add(but1);
f.add(but2);
f.add(but3);
f.add(but4);
f.add(but5);
f.add(but6);
f.add(but7);
f.setVisible(true);
f.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public static void main(String[] args) throws Exception{
FileReader out=new FileReader("D:/密碼.txt");
System.out.println("請輸入一位系統密碼:");
int str=0;
str=out.read();
out.close();
int key=str-48;
Scanner sc=new Scanner(System.in);
int k=0;
for(int i=0;i<3;i++)
{
if(k==1)break;
if(k==2)break;
int g=sc.nextInt();
if(g==key)
{
System.out.println("密碼正確,歡迎使用");
javax.swing.SwingUtilities.invokeLater(new Runnable() {
public void run()
{
createAndShowGUI();
}
});
k=1;
break;
}
if(g!=key&&i!=2)
{
System.out.println("密碼錯誤!重新輸入!");
}
if(g!=key&&i==2)
{
System.out.println("三次錯誤,無法使用!");
k=2;
}
}
}
}
缺陷:要先創建一個密碼文件存放一位密碼,路徑可以修改,