【Java代码保护探索之路系列:代码加密】之一:代码加密开篇 – DES算法加解密Java类文件

  • Post author:
  • Post category:java


作者:郭嘉

邮箱:allenwells@163.com

博客:

http://blog.csdn.net/allenwells


github:

https://github.com/AllenWells3

代码加密也是对Java代码进行保护的一种重要方式,作为Java代码加密开篇的文章,本文先举例介绍,如何利用加密算法实现对.class文件进行加密。注意为说明基本原理,本文程序采用命令行进行操作,后续会给出具有UI界面的Java类加密软件。

一 编写Java代码

1.1 生成安全密钥

生成密钥的步骤
  1. 创建Cipher对象(Java密码扩展包含了

    Cipher

    类,这个类是所有加密算法的超类。)。
  2. 设置模式和密钥,生成密钥的步骤如下所示:

    1. 为加密算法获取KeyGenerator。
    2. 用随机源来初始化密钥发生器,如果密码块长度是可变的,还需要制定期望的密码块长度。
    3. 调用generateKey方法。

代码如下所示:

首先写个工具类

FileUtil.java

用于文件读取和写入,源码如下所示:


package com.allenwells.codeencryption.util;

import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.IOException;

public class FileUtil
{
   
    /**
     * 将文件读入byte数组
     * 
     * @param fileName
     * @return
     * @throws IOException
     */
    static public byte[] fileReadToByteArray(String fileName)
            throws IOException
    {
        File file = new File(fileName);
        long fileLength = file.length();
        byte fileData[] = new byte[(int) fileLength];
        FileInputStream fis = new FileInputStream(file);
        int readLength = fis.read(fileData);
        if (readLength != fileLength)
        {
            System.err.println("***Only read " + readLength + " of " + fileLength
                    + " for file " + file + " ***");
        }
        fis.close();
        return fileData;
    }

    /**
     * 将byte数组写入到文件
     * 
     * @param fileName
     * @param data
     * @throws IOException
     */
    static public void byteArrayWriteToFile(String fileName, byte[] data)
            throws IOException
    {
        FileOutputStream fos = new FileOutputStream(fileName);
        fos.write(data);
        fos.close();
    }

}

生成密钥文件,可由命令行传入密钥的名字,这里使用key.data,源码如下所示:</



版权声明:本文为AllenWells原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。