java中加密解密方式(二)

其实吧,写这个博客也是为了防止自己忘记这些,毕竟,要学的东西太多····

请老鸟放过···

今天,我们来说一下加密和解密,MD5是一种单方向的加密,我们今天来讲下另外一种加密和解密的方式,可以加密文件和解密文件,该方式需要有一点点运算符的基础。
大家可以去参考一下http://blog.csdn.net/xiaochunyong/article/details/7748713
这个博客大神对Java 位运算(移位、位与、或、异或、非)的解释,超详细。

好了,不说废话了,直接上源码。

import java.io.*;

/**
 * 加密和解密
 * @author mmyhs
 *
 */
public class EncAndDec {

    private static final int numOfEncAndDec = 1; // 加密解密秘钥 0x99
    private static int dataOfFile = 0; // 文件字节内容

    public static void main(String[] args) {

        File srcFile = new File("C:/Users/mmyhs/Desktop/mysql temp/新建文件夹/emp-dep.txt"); // 初始文件
        File encFile = new File("C:/Users/mmyhs/Desktop/mysql temp/新建文件夹/01"); // 加密文件
        File decFile = new File("C:/Users/mmyhs/Desktop/mysql temp/新建文件夹/02.txt"); // 解密文件

        try {
            EncFile(srcFile, encFile); // 加密操作
            DecFile(encFile, decFile); // 解密操作
        } catch (Exception e) {
            e.printStackTrace();
        }
    }

    /**
     * 加密文件
     * @param srcFile   需要加密的文件地址
     * @param encFile   加密后的文件存放地址
     * @throws Exception
     */
    private static void EncFile(File srcFile, File encFile) throws Exception {
        if (!srcFile.exists()) {
            System.out.println("source file not exixt");
            return;
        }

        if (!encFile.exists()) {
            System.out.println("encrypt file created");
            encFile.createNewFile();
        }
        InputStream fis = new FileInputStream(srcFile);
        OutputStream fos = new FileOutputStream(encFile);

        while ((dataOfFile = fis.read()) > -1) {
            // 使用位异或( ^ )来进行加密
            fos.write(dataOfFile^numOfEncAndDec);
        }

        // 关流
        fis.close();
        fos.flush();
        fos.close();
    }

    /**
     * 解密文件
     * @param encFile   需要解密的文件地址
     * @param decFile   文件解密后存放的地址
     * @throws Exception    
     */
    private static void DecFile(File encFile, File decFile) throws Exception {
        if (!encFile.exists()) {
            System.out.println("source file not exixt");
            return;
        }

        if (!encFile.exists()) {
            System.out.println("encrypt file created");
            encFile.createNewFile();
        }
        InputStream fis = new FileInputStream(encFile);
        OutputStream fos = new FileOutputStream(decFile);

        while ((dataOfFile = fis.read()) > -1) {
            // 使用位异或( ^ )来进行解密
            fos.write(dataOfFile^numOfEncAndDec);
        }

        // 关流
        fis.close();
        fos.flush();
        fos.close();
    }

}

“`

有两点需要注意:
  1、在调用加密与解密方法时,建议还是使用
try {

    } catch (Exception e) {
    // TODO: handle exception

    }

捕获异常。

  2、对用来加密或解密的源文件进行打开(读取)操作之前,最好判断其是否存在,免得造成意想不到的错误和时间的浪费。因为若文件不存在,后续的操作都是没有意义的。

  今天就先写到这,总结一下吧。文件加密简单地说就是对数据进行变换,虽然一千种方法可能会有一千种一种结果,但是思想是通用的。关键是加密所采用的算法的难易。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值