黑马程序员技术交流社区

标题: 学了IO流,自己写了个图片加密 [打印本页]

作者: wei_john    时间: 2015-12-9 11:39
标题: 学了IO流,自己写了个图片加密
原理就是读取字节,^上一个数字咯。
作者: wei_john    时间: 2015-12-9 11:40
  1. import java.io.*<span style="line-height: 30.8px;">;</span>
  2. import java.util.Scanner;

  3. /**
  4. *
  5. * @author Wei_John
  6. * @version 自用图片加密 2015.11.26
  7. */

  8. public class Locker {
  9.         /**
  10.          * @param args
  11.          * @throws IOException
  12.          */
  13.         public static void main(String[] args) throws IOException {

  14.                 System.out.println("*****************************************");
  15.                 System.out.println("*              自用图片加密             *");
  16.                 System.out.println("*                1.加密                        *");
  17.                 System.out.println("*                2.解锁                 *");
  18.                 System.out.println("*                          by Wei_John  *");
  19.                 System.out.println("*****************************************");
  20.                 Scanner sc = new Scanner(System.in);
  21.                 System.out.print("请输入: ");
  22.                 String line = sc.nextLine();
  23.                 //判断输入是否为1 和 2
  24.                 while( ! line.matches("[12]")){
  25.                         System.out.print("请输入: ");
  26.                         line = sc.nextLine();
  27.         }
  28.                 int x = Integer.valueOf(line);
  29.                 if (x == 1) {
  30.                         // 加密
  31.                         Locked(getFile(), Lock(),0);
  32.                         System.out.println("加密成功");
  33.                 } else if (x == 2) {
  34.                         // 解锁
  35.                         UnLocked(getFile(), Lock());
  36.                         System.out.println("解锁成功");
  37.                 }
  38. }
  39.        
  40.         /**
  41.          * UnLocked
  42.          * @param file
  43.          * @param password
  44.          * @throws FileNotFoundException
  45.          * @throws IOException
  46.          */
  47.        
  48.         private static void UnLocked(File file, int password) throws FileNotFoundException, IOException {
  49.                 Locked(file,password,1);
  50.         }
  51.         /**
  52.          * Locked
  53.          * @param file        需要加密文件
  54.          * @param password        密码
  55.          * @throws FileNotFoundException
  56.          * @throws IOException
  57.          */
  58.         private static void Locked(File file, int password, int state)
  59.                         throws FileNotFoundException, IOException {
  60.                 BufferedInputStream bis = new BufferedInputStream(new FileInputStream(
  61.                                 file));
  62.                 BufferedOutputStream bos;
  63.                 if (state == 0) {
  64.                         // 加密副本
  65.                         StringBuilder sb = new StringBuilder(file.getAbsolutePath());
  66.                         StringBuilder sb2 = sb.replace(file.getAbsolutePath().length()-file.getName().length(),
  67.                                         file.getAbsolutePath().length(),"加密_"+file.getName());
  68.                         bos = new BufferedOutputStream(new FileOutputStream(
  69.                                         sb2.toString()));
  70.                 } else {
  71.                         // 解锁副本
  72.                         StringBuilder sb = new StringBuilder(file.getAbsolutePath());
  73.                         StringBuilder        sb2 = sb.replace(file.getAbsolutePath().length()-file.getName().length(),
  74.                                         file.getAbsolutePath().length(),"解锁_"+file.getName());
  75.                        
  76.                         bos = new BufferedOutputStream(new FileOutputStream(sb2.toString()));
  77.                 }

  78.                 int b = -1;
  79.                 int count =0;
  80.                 while ((b = bis.read()) != -1) {
  81.                         count ++;
  82.                         bos.write(b ^ password);
  83.                         if (count % 1000 == 0) {
  84.                                 bos.flush();
  85.                         }
  86.                 }
  87.                 bis.close();
  88.                 bos.close();
  89.         }
  90.         /**
  91.          * 输入密码
  92.          * @return password
  93.          * @throws IOException
  94.          */
  95.         private static int Lock() throws IOException {
  96.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  97.                 System.out.println("请输入密码(学号):");
  98.                 String pass = br.readLine();
  99.                 char[] ch = pass.toCharArray();
  100.                 int password = 0;
  101.                 for (char c : ch) {
  102.                         password += (int) c;
  103.                 }
  104.                 return password;
  105.         }
  106.        
  107.         /**
  108.          * 获取加密文件
  109.          * @return        需要加密文件
  110.          * @throws IOException
  111.          */
  112.        
  113.         private static File getFile() throws IOException {
  114.                 BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
  115.                 while (true) {
  116.                         System.out.println("请输入加密文件路径:");
  117.                         String path = br.readLine();
  118.                         File file = new File(path);
  119.                         if (file.isFile()) {
  120.                                 System.out.println("获取文件成功");
  121.                                 return file;
  122.                         } else {
  123.                                 System.out.println("您输入的文件路径有误,请重新输入");
  124.                         }
  125.                 }
  126.         }
  127. }
复制代码



作者: Weidan    时间: 2015-12-9 12:58
写得不错 想拿来用用了。。。
作者: wei_john    时间: 2015-12-9 17:47
Weidan 发表于 2015-12-9 12:58
写得不错 想拿来用用了。。。

.其实挺早之前写的,好多东西可以修改下。你可以自己修改
作者: 高云    时间: 2015-12-9 18:10
加油。。
作者: bulala    时间: 2015-12-11 15:13
加油!

作者: 金金金小天    时间: 2015-12-11 16:58
学习学习,赞
作者: 啦啦啦啦啦啦啦    时间: 2015-12-11 20:45
写的不错 不过我还看不懂 ,等我看懂了我再来
作者: songjianzaina    时间: 2015-12-11 21:34
赞一个!




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2