java制作一个简单的二进制加密程序

本文介绍了一个使用Java编写的简单文件加密解密程序。程序基于二进制数据的异或操作,结合时间戳生成随机密钥,实现加密和解密功能。用户可以选择加密或解密文件,并通过导入导出密钥文件实现解密。此程序适用于小文件,对于大文件未进行测试,且代码仍有优化空间。

java制作简单的加密程序

引言
在日常生活中,我们总会想着对一些文件进行加密,从而保护个人隐私。在学习了java之后,想到了一个简单的加密程序方案,同时不可否认的是这样一个方案的效率并不高,仅用于学习和小文件加密。

加密原理
日常的文件如文本,图像,视频等在计算机存放都是以二进制存放,所以利用这个性质可以对二进制数据进行处理,使其无法正常打开,需要使用时再将其恢复。
问题是怎么对二进制数据处理后又能准确地恢复?我们想到异或,一个数异或一个数两次会恢复,也就是说我们读取原文件时异或一个数就可以实现加密,要恢复时只需要再执行一次程序即可。

加密过程
读取原文件——>异或原文件——>生成加密文件

解密过程
读取加密文件——>异或加密文件——>生成解密文件

优化
通过原理我们很容易写出加密程序,但事实上如此简单的加密程序可能仅限自己个人使用,有没有办法实现像网上的加密程序那样面对用户?理论上是可以的,我们可以利用随机码加密,当然也可以由用户自定义,在这里提供一种随机码加密的方案,面对用户性的。
说到随机码,首先会想到Rondom,不错这个确实可以,但是其实用时间戳来随机生成随机码会更加难解。

 Random ran = new Random(System.currentTimeMillis());
 a= ran.nextInt();

a就是根据时间生成的随机码

生成了随机码,那么想要解密文件这个随机码就是关键,所以不难想到我们应想办法将随机码保存下来,最好是生成一个密钥文件,也就是说把随机码导出成一个txt文本文件。
相应的,解密的时候也可以把程序设置成导入密钥来实现解锁文件功能,这样就实现了密钥功能。

实现代码
进行了3次左右的代码优化,大致实现了上述功能。

package com.company;
import java.io.*;
import java.util.Random;
import java.util.Scanner;
//图像加密(个人版)二进制加密
//加密思路:利用异或两次恢复原态的原理进行二进制加密
//加密密钥:时间戳随机码(Random code)
//代码纯原创,仅供学习与参考
//输入路径需//隔开
public class Main {
    public static void main(String[] args) throws Exception {
        Random ran = new Random(System.currentTimeMillis());
        int flag=3;
        System.out.println("本程序提供加密与解密功能");
        System.out.println("1.加密文件");
        System.out.println("2.解密文件");
        System.out.println("注:输入文件路径需用//隔开");
        System.out.println("请输入你的选择(序号):")
        Scanner fl=new Scanner(System.in);
        int f= fl.nextInt();
        switch (f) {
            case 1:
                flag = 0;
                break;
            case 2:
                flag = 1;
                break;
            default:
                break;
        }
        System.out.println("输入加密(解密)文件的文件目录:");
        Scanner sc=new Scanner(System.in);
        String cy= sc.next();
        System.out.println("输入生成文件路径:");
        Scanner sd=new Scanner(System.in);
        String sr= sd.next();
        int y=0;
        if(flag==1)
        {
            System.out.println("导入解密密钥文件路径:");
            Scanner my=new Scanner(System.in);
            String sg=my.next();
            BufferedReader bg=new BufferedReader(new FileReader(sg));
                String yun;
                //读取密钥数据(通常为一行)
                while((yun=bg.readLine())!=null) {
                    y=Integer.parseInt(yun);//转换读取的数据类型为int型
                }
                bg.close();
                File su=new File(sg);
            System.out.println(su.delete());//删除密钥文件,返回真
        }
        FileInputStream s=new FileInputStream(cy);
        FileOutputStream p=new FileOutputStream(sr);
        File file=new File(cy);
       int x,a=0;
       if(flag==0)
           a= ran.nextInt();
       if(flag==1)
           a=y;
      while((x=s.read())!=-1){
          p.write(x^a);
       }
       s.close();
       p.close();
        System.out.println(file.delete());//删除掉原文件,返回真
        if(flag==0){
           String str=a+"";//将a转换为字符串类型密钥
           FileOutputStream t=new FileOutputStream(cy+".txt");
           t.write(str.getBytes());
           t.close();
       }
       if(flag==0)
            System.out.println("加密成功!");
       if(flag==1)
            System.out.println("解密成功!");
    }
}

这个程序为面对用户设计,事实上可以做一些简单修改变成自己个人使用类型

运行结果
在这里插入图片描述

结语
本代码实现加密&解密功能仅限于小文件,对于大文件并未测试,如需测试请先删除源代码中的delete()方法避免因加密失败造成数据损失,代码还处于优化阶段,有更好的方案可私信联系。如有帮助,恳请点赞支持一下!

<br> 系统介绍<br> JavaClass文件加密专家是一款针对Java应用程序Class二进制文件加密的软件,系统核心由纯C语言编写,运行效率极<br>高。传统的Java程序加密的方式多为代码混迹方式,但是无论多么复杂的混迹方式,在使用Java代码反编译程序后还是可以看<br>到代码的逻辑结构,这样并没有彻底的保护好您的代码。<br> JavaClass文件加密专家通过分析Class文件的结构,将Class二进制代码中耗时较多的部份抽出并替换为Native C代码,<br>并且使用1024位加密算法将Class文件数据加密,任何Java反编译工具均不可能对加密后的文件进行破解。<br><br> 系统特点<br> 1.采用纯C语言开发的内核算法,运行速度极快。<br> 2.抽出了JVM虚拟机耗时较多的代码,替换为原生C代码去执行,加密后的Class文件运行效率比加密前还要快。<br> 3.彻底保护您的Class二进制文件,任何通过分析Class文件结构来实现反编译的工具均不能对加密后的文件反编译。<br><br> 使用方法<br> 在要分发您的Java应用程序前,使用JavaClass文件加密专家对所有的Class文件或Jar文件进行加密,在您的系统运行参<br>数中加入以下内容:<br> 1.WEB应用程序<br> 在您使用的Java Web Server的启动参数中,增加以下内容: -agentlib:<brainysoft.dll的存放目录>\brainysoft即<br>可。<br> 举例 :<br> 假设您的Java Web Server为Tomcat,以Windows平台为例,Tomcat的存放目录为C:\Tomcat 5.5 ,brainysoft.dll存<br>放在c:\windows目录中,在Tomcat的bin目录中新建一个文件setenv.bat,setenv.bat中的内容:set JAVA_OPTS= -<br>agentlib:c:\windows\brainysoft %JAVA_OPTS%,保存setenv.bat文件,重新启动Tomcat后就可以正确加载加密类了。<br> 2.独立的Java应用程序<br> 在您的应用程序运行参数中加入以下内容: -agentlib:<brainysoft.dll的存放目录>\brainysoft<br> 举例:<br> Test.class文件的package为com.test, 在运行您的Test.class或Jar时使用以下方式:java -agentlib:<br><brainysoft.dll的存放目录>\brainysoft <-classpath 您的.jar文件> com.test.Test。<br> 3.EJB组件<br> 运行加密后的EJB组件的方式与运行WEB应用程序类似,找到您的EJB容器的启动配置文件,加入-agentlib:<br><brainysoft.dll的存放目录>\brainysoft 即可。<br><br> 应用环境<br> JavaClass文件加密专家只能用在JDK1.5及更新版本的JDK中,您在Windows平台下加密后的Class文件不必再修改就可以应<br>用于Linux、Unix等平台中。<br>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值