java实现文件随机加密

1、引言

        有时候我们需要对我们的某些文件数据进行加密,并且不希望被轻易破译,此时最好不要使用已知的加密方法,这里我就给大家提供一种数据加密的方式,用以实现文件数据的加密,我称之为随机加密,即使是对相同文件,每次加密的结果都可能不同,此方法适用于非文本文件,大家可以参照我的加密思路,自己修改加密规则,从而获得不同的加密效果,而不是直接使用我提供的加密方法。

2、实现思路

        把文件看作是一连串的以字节为单位的数值的结合体,在文件开头空出几个字节的位置,用以对应某种类型的函数的系数或参数,具体根据实际情况而论,根据这几个系数得出具体的函数,然后算出一个固定值,然后再根据这个固定值生成一个固定大小的字节数组,数组中的值用随机数填充,合并在需要加密的文件中,这些系数和参数也都要使用随机数生成,保证每次加密结果都不同。

3、简单案例实现

        这里我就以常数函数为例,在文件开头空出一个字节,生成的随机数值在50到126范围内,根据第一个字节的值生成一个字节数组,用随机数填充,写入文件时先写常数值,再写随机数组的数据,最后再把文件数据写在末尾,解密时就根据第一个字节的值解密,加密代码如下:

    /**
     * 非文本文件随机加密
     */
    @Test
    public void testFile() throws IOException {
        File fileOld=new File("D:/data/file/t1.JPG");
        File fileNew=new File("D:/data/file/t2.JPG");
        FileInputStream is=new FileInputStream(fileOld);
        FileOutputStream os=new FileOutputStream(fileNew);
        int len;
        byte[]buffer;
        byte start= (byte) ((Math.random()*77)+50);
        buffer=new byte[start];
        int i;
        for (i = 0; i < buffer.length; i++) {
            buffer[i]= (byte) ((Math.random()*256)-128);;
        }
        os.write(start);
        os.write(buffer);
        buffer=new byte[1024];
        while ((len=is.read(buffer))!=-1){
            os.write(buffer,0,len);
        }
        is.close();
        os.close();
    }

        解密代码如下:

    /**
     * 非文本文件解密
     */
    @Test
    public void testFile1() throws IOException {
        File fileOld=new File("D:/data/file/t2.JPG");
        File fileNew=new File("D:/data/file/t3.JPG");
        FileInputStream is=new FileInputStream(fileOld);
        FileOutputStream os=new FileOutputStream(fileNew);
        int len;
        byte[]buffer=new byte[1];
        is.read(buffer);
        byte start= buffer[0];
        buffer=new byte[start];
        is.read(buffer);
        int i;
        buffer=new byte[1024];
        while ((len=is.read(buffer))!=-1){
            os.write(buffer,0,len);
        }
        is.close();
        os.close();
    }

4、效果图

        

  • 16
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值