A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

本帖最后由 田建 于 2012-7-3 22:38 编辑
  1. package cn.itcast.secret;

  2. import java.awt.Container;
  3. import java.awt.FileDialog;
  4. import java.awt.FlowLayout;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.io.File;
  8. import java.io.FileInputStream;
  9. import java.io.FileNotFoundException;
  10. import java.io.FileOutputStream;
  11. import java.io.IOException;

  12. import javax.swing.ImageIcon;
  13. import javax.swing.JButton;
  14. import javax.swing.JFileChooser;
  15. import javax.swing.JFrame;
  16. import javax.swing.JLabel;
  17. import javax.swing.JPanel;
  18. import javax.swing.JTextField;

  19. public class BuildSecret extends JFrame implements ActionListener {
  20. private JPanel imagePanel;
  21. private ImageIcon background;
  22. // FileDialog fig;

  23. JTextField jtf1 = new JTextField("传入要加密文件", 8);
  24. JTextField jtf2 = new JTextField("传入要解密文件", 8);
  25. JButton jbt11 = new JButton("导入");
  26. JButton jbt12 = new JButton("加密");
  27. JButton jbt21 = new JButton("导入");
  28. JButton jbt22 = new JButton("解密");

  29. public BuildSecret() {
  30. // fig=new FileDialog(this,"打开",FileDialog.LOAD);有了JFileChooser,不需要了!

  31. this.setTitle("加密解密器");
  32. this.setLayout(new FlowLayout());
  33. myEvent();
  34. this.add(jtf1);
  35. this.add(jbt11);
  36. this.add(jbt12);
  37. this.add(jtf2);
  38. this.add(jbt21);
  39. this.add(jbt22);

  40. /*
  41. * background=new ImageIcon("f:\123.jpg");//背景图片 JLabel label=new
  42. * JLabel(background);//把背景图片显示在一个标签里面 label.setBounds(0, 0,
  43. * background.getIconWidth(), background.getIconHeight());
  44. * imagePanel=(JPanel
  45. * )this.getContentPane();//把内容窗格转化为JPanel,否则不能用setOpaque()使内容窗格透明
  46. * imagePanel.setOpaque(false); imagePanel.setLayout(new FlowLayout());
  47. * this.getLayeredPane().setLayout(null);//把背景图片添加到分层窗格的最底层作为背景
  48. * this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));
  49. * this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  50. * this.setResizable(false);
  51. */
  52. setBac();
  53. Container c = this.getContentPane();
  54. JPanel jp = new JPanel();
  55. jp.setOpaque(false);
  56. c.add(jp);
  57. this.setBounds(400, 250, 500, 360);

  58. // this.setBounds(300,200,400,300);
  59. this.setVisible(true);
  60. }

  61. private void myEvent() {
  62. // TODO Auto-generated method stub
  63. jbt11.addActionListener(new ActionListener() {
  64. public void actionPerformed(ActionEvent e) {
  65. // fig.setVisible(true);
  66. JFileChooser jfc = new JFileChooser();
  67. if (jfc.showOpenDialog(BuildSecret.this) == JFileChooser.APPROVE_OPTION) {
  68. String strPath = jfc.getSelectedFile().getAbsolutePath();
  69. jtf1.setText(strPath);
  70. }
  71. }
  72. });
  73. jbt21.addActionListener(new ActionListener() {
  74. public void actionPerformed(ActionEvent e) {
  75. // fig.setVisible(true);
  76. JFileChooser jfc = new JFileChooser();
  77. if (jfc.showOpenDialog(BuildSecret.this) == JFileChooser.APPROVE_OPTION) {
  78. String strPath = jfc.getSelectedFile().getAbsolutePath();
  79. jtf2.setText(strPath);

  80. }
  81. }
  82. });
  83. jbt12.addActionListener(new ActionListener() {
  84. public void actionPerformed(ActionEvent e) {
  85. try {
  86. File file = new File(jtf1.getText());
  87. String str=file.getName();
  88. FileInputStream fis = new FileInputStream(file);
  89. FileOutputStream fos = new FileOutputStream("f:\\str.jpg");
  90. int len = 0;
  91. byte[] bs = new byte[100];
  92. while ((len = fis.read(bs, 10, 80)) != -1) {
  93. for (int i = 0; i < bs.length; i++) {
  94. fos.write(bs, 0, len + 20);
  95. }
  96. fos.close();
  97. fis.close();
  98. }
  99. } catch (FileNotFoundException e1) {
  100. System.out.println("操作的文件不存在");
  101. } catch (IOException e2) {
  102. System.out.println("发生IO操作异常");
  103. }
  104. }
  105. });
  106. jbt22.addActionListener(new ActionListener() {
  107. @Override
  108. public void actionPerformed(ActionEvent e) {
  109. // TODO Auto-generated method stub
  110. try {
  111. File file=new File(jtf2.getText());
  112. FileInputStream fis2 = new FileInputStream(file);
  113. FileOutputStream fos2 = new FileOutputStream("f:\\str1.jpg");
  114. int len2 = 0;
  115. byte[] bs2 = new byte[100];
  116. while ((len2 = fis2.read(bs2)) != -1) {
  117. fos2.write(bs2, 10, len2 - 20);
  118. }
  119. fos2.close();
  120. fis2.close();
  121. } catch (FileNotFoundException e1) {
  122. System.out.println("操作的文件不存在");
  123. } catch (IOException e1) {
  124. System.out.println("发生IO操作异常");
  125. }
  126. }
  127. });
  128. }

  129. public void setBac() {
  130. //加的一个背景
  131. ((JPanel) this.getContentPane()).setOpaque(false);
  132. ImageIcon img = new ImageIcon("f://123.jpg");
  133. JLabel background = new JLabel(img);
  134. this.getLayeredPane().add(background, new Integer(Integer.MIN_VALUE));
  135. background.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());

  136. }

  137. public static void main(String[] args) {
  138. new BuildSecret();
  139. }

  140. @Override
  141. public void actionPerformed(ActionEvent e) {
  142. // TODO Auto-generated method stub

  143. }
  144. }
复制代码

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1

查看全部评分

7 个回复

倒序浏览
很好奇,你的import语句为什么引入的那么详细
回复 使用道具 举报
黑马-王言龙 发表于 2012-7-3 20:55
很好奇,你的import语句为什么引入的那么详细

用的eclipse的自动导入!
回复 使用道具 举报
终于自己找到问题了,103行写多了!进行下一步了,对文件做判断!
回复 使用道具 举报
终于基本写完了,现在把完整代码附上,一起学习!里面用的图片是在f:盘目录下,名字是123.jpg,大小是500*360,有兴趣可以放一张试试
  1. package cn.itcast.secret;

  2. import java.awt.BorderLayout;
  3. import java.awt.Container;
  4. import java.awt.FlowLayout;
  5. import java.awt.event.ActionEvent;
  6. import java.awt.event.ActionListener;
  7. import java.io.File;
  8. import java.io.FileInputStream;
  9. import java.io.FileNotFoundException;
  10. import java.io.FileOutputStream;
  11. import java.io.IOException;
  12. import java.util.EventListener;

  13. import javax.swing.ImageIcon;
  14. import javax.swing.JButton;
  15. import javax.swing.JFileChooser;
  16. import javax.swing.JFrame;
  17. import javax.swing.JLabel;
  18. import javax.swing.JPanel;
  19. import javax.swing.JProgressBar;
  20. import javax.swing.JTextField;

  21. public class BuildSecret extends JFrame implements ActionListener {
  22.         private JPanel imagePanel;
  23.         private ImageIcon background;
  24.         // FileDialog fig;

  25.         JTextField jtf1 = new JTextField("传入要加密文件", 8);
  26.         JTextField jtf2 = new JTextField("传入要解密文件", 8);
  27.         JButton jbt11 = new JButton("导入");
  28.         JButton jbt12 = new JButton("加密");
  29.         JButton jbt21 = new JButton("导入");
  30.         JButton jbt22 = new JButton("解密");
  31.        


  32.         public BuildSecret() {
  33.                 // fig=new FileDialog(this,"打开",FileDialog.LOAD);有了JFileChooser,不需要了!

  34.                 this.setTitle("加密解密器");
  35.                 this.setLayout(new FlowLayout());
  36.                
  37.                 myEvent();
  38.                 this.add(jtf1);
  39.                 this.add(jbt11);
  40.                 this.add(jbt12);
  41.                 this.add(jtf2);
  42.                 this.add(jbt21);
  43.                 this.add(jbt22);
  44.                
  45.                 /*
  46.                  * background=new ImageIcon("f:\123.jpg");//背景图片 JLabel label=new
  47.                  * JLabel(background);//把背景图片显示在一个标签里面 label.setBounds(0, 0,
  48.                  * background.getIconWidth(), background.getIconHeight());
  49.                  * imagePanel=(JPanel
  50.                  * )this.getContentPane();//把内容窗格转化为JPanel,否则不能用setOpaque()使内容窗格透明
  51.                  * imagePanel.setOpaque(false); imagePanel.setLayout(new FlowLayout());
  52.                  * this.getLayeredPane().setLayout(null);//把背景图片添加到分层窗格的最底层作为背景
  53.                  * this.getLayeredPane().add(label,new Integer(Integer.MIN_VALUE));
  54.                  * this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  55.                  * this.setResizable(false);
  56.                  */
  57.                 setBac();
  58.                 Container c = this.getContentPane();
  59.                 JPanel jp = new JPanel();
  60.                 jp.setOpaque(false);
  61.                 c.add(jp);
  62.                 this.setBounds(400, 250, 500, 360);

  63.                 // this.setBounds(300,200,400,300);
  64.                 this.setVisible(true);
  65.         }

  66.         private void myEvent() {
  67.                 // TODO Auto-generated method stub
  68.                 jbt11.addActionListener(new ActionListener() {
  69.                         public void actionPerformed(ActionEvent e) {
  70.                                 // fig.setVisible(true);
  71.                                 JFileChooser jfc = new JFileChooser();
  72.                                 if (jfc.showOpenDialog(BuildSecret.this) == JFileChooser.APPROVE_OPTION) {
  73.                                         String strPath = jfc.getSelectedFile().getAbsolutePath();
  74.                                         jtf1.setText(strPath);
  75.                                 }
  76.                         }
  77.                 });
  78.                 jbt21.addActionListener(new ActionListener() {
  79.                         public void actionPerformed(ActionEvent e) {
  80.                                 // fig.setVisible(true);
  81.                                 JFileChooser jfc = new JFileChooser();
  82.                                 if (jfc.showOpenDialog(BuildSecret.this) == JFileChooser.APPROVE_OPTION) {
  83.                                         String strPath = jfc.getSelectedFile().getAbsolutePath();
  84.                                         jtf2.setText(strPath);

  85.                                 }
  86.                         }
  87.                 });
  88.                 jbt12.addActionListener(new ActionListener() {
  89.                         public void actionPerformed(ActionEvent e) {
  90.                                 String str0="加密后";
  91.                                 try {
  92.                                         File file = new File(jtf1.getText());
  93.                                         String str=file.getName();
  94.                                         String[] arrString=str.split("\\.");
  95.                                         String str1=arrString[0];
  96.                                         String str2=arrString[1];
  97.                                         FileInputStream fis = new FileInputStream(file);
  98.                                         String str3=arrString[0]+"("+str0+")"+"."+arrString[1];
  99.                                         FileOutputStream fos = new FileOutputStream("f:\\\\"+str3);
  100.                                         int len = 0;
  101.                                         byte[] bs = new byte[100];
  102.                                         while ((len = fis.read(bs,10,80)) != -1) {
  103.                                        
  104.                                                         fos.write(bs, 0, len + 20);
  105.                                                         System.out.println("加密进行中");
  106.                                                
  107.                                         }
  108.                                         System.out.println("加密完成,文件在F盘目录");
  109.                                                 fos.close();
  110.                                                 fis.close();
  111.                                        
  112.                                 } catch (FileNotFoundException e1) {
  113.                                         System.out.println("操作的文件不存在");
  114.                                 } catch (IOException e2) {
  115.                                         System.out.println("发生IO操作异常");
  116.                                 }
  117.                         }
  118.                 });
  119.                 jbt22.addActionListener(new ActionListener() {
  120.                         @Override
  121.                         public void actionPerformed(ActionEvent e) {
  122.                                 // TODO Auto-generated method stub
  123.                                 String str0="解密后";
  124.                                 try {
  125.                                         File file=new File(jtf2.getText());
  126.                                         FileInputStream fis2 = new FileInputStream(file);
  127.                                         String str=file.getName();
  128.                                         String[] arrString=str.split("\\(");
  129.                                         String str2=arrString[0];
  130.                                         String str3=arrString[1];
  131.                                         String[] arrString1=str3.split("\\.");
  132.                                         String str4=arrString1[1];
  133.                                         String str5=str2+"("+str0+")"+"."+str4;
  134.                                         FileOutputStream fos2 = new FileOutputStream("f:\\\\"+str5);
  135.                                         int len2 = 0;
  136.                                         byte[] bs2 = new byte[100];
  137.                                         while ((len2 = fis2.read(bs2)) != -1) {
  138.                                                 fos2.write(bs2, 10, len2 - 20);
  139.                                                 System.out.println("解密进行中");
  140.                                         }
  141.                                         System.out.println("解密完成,文件在F盘目录");
  142.                                         fos2.close();
  143.                                         fis2.close();
  144.                                 } catch (FileNotFoundException e1) {
  145.                                         System.out.println("操作的文件不存在");
  146.                                 } catch (IOException e1) {
  147.                                         System.out.println("发生IO操作异常");
  148.                                 }
  149.                         }
  150.                 });
  151.        
  152.         }

  153.         public void setBac() {
  154.                 //加的一个背景
  155.                 ((JPanel) this.getContentPane()).setOpaque(false);
  156.                 ImageIcon img = new ImageIcon("f://123.jpg");
  157.                 JLabel background = new JLabel(img);
  158.                 this.getLayeredPane().add(background, new Integer(Integer.MIN_VALUE));
  159.                 background.setBounds(0, 0, img.getIconWidth(), img.getIconHeight());

  160.         }

  161.         public static void main(String[] args) {
  162.                 new BuildSecret();
  163.         }

  164.         @Override
  165.         public void actionPerformed(ActionEvent e) {
  166.                 // TODO Auto-generated method stub
  167.                
  168.         }
  169. }
复制代码
回复 使用道具 举报
田建 发表于 2012-7-4 08:24
终于基本写完了,现在把完整代码附上,一起学习!里面用的图片是在f:盘目录下,名字是123.jpg,大小是500*3 ...

楼主的加密解密思想是:
加密时申请一个100字节的缓冲区,将数据写在10到80的位置上,然后将整个缓冲区100个字节都写入到文件中,这样文件中就会多了一些没有必要的内容。
解密时每次读取100个字节,从中取出10到80位置上的数据,重新组合成一个文件。

这样做确实达到了简单加密解密的要求,不过对于文本文件txt,可能加密解密效果不是很好,别人可以看到一些数据的,只不过这些数据被一些乱发分隔开了。
回复 使用道具 举报
韦念欣 发表于 2012-7-4 10:18
楼主的加密解密思想是:
加密时申请一个100字节的缓冲区,将数据写在10到80的位置上,然后将整个缓冲区10 ...

那还有个方法,就是在加密的时候将扩展名也一起改了,比如以.properties结尾,但主要问题是在解密的时候就不知道它原先的扩展名是什么了?有什么方法可以解决吗?
回复 使用道具 举报
田建 发表于 2012-7-4 11:56
那还有个方法,就是在加密的时候将扩展名也一起改了,比如以.properties结尾,但主要问题是在解密的时候 ...

可以将扩展名存储在文件中,这样可以从文件中直接读取扩展名。
存在开头几个字节的部分,读取的时候,先读取扩展名,然后在读取其他内容。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马