如何利用DES加密的算法保护Java源代码
Java源代码经过编译,由于JVM界面是完全透明的,Java类文件能够很容易通过反编译器重新转换成源代码。因此,所有的算法、类文件等都可以以源代码的形式被公开,使得软件不能受到保护……
利用DES算法加密的步骤
(1)生成一个安全密钥。在加密或解密任何数据之前需要有一个密钥。密钥是随同被加密的应用程序一起发布的一段数据,密钥代码如下所示。
生成一个密钥代码
// 生成一个可信任的随机数源
Secure Random sr = new SecureRandom();
// 为我们选择的DES算法生成一个KeyGenerator对象
KeyGenerator kg = KeyGenerator.getInstance ("DES" );
Kg.init (sr);
// 生成密钥
Secret Key key = kg.generateKey();
// 将密钥数据保存为文件供以后使用,其中key Filename为保存的文件名
Util.writeFile (key Filename, key.getEncoded () );
(2)加密数据。得到密钥之后,接下来就可以用它加密数据。如下所示。
用密钥加密原始数据
// 产生一个可信任的随机数源
SecureRandom sr = new SecureRandom();
//从密钥文件key Filename中得到密钥数据
Byte rawKeyData [] = Util.readFile (key Filename);
// 从原始密钥数据创建DESKeySpec对象
DESKeySpec dks = new DESKeySpec (rawKeyData);
// 创建一个密钥工厂,然后用它把DESKeySpec转换成Secret Key对象
SecretKeyFactory key Factory = SecretKeyFactory.getInstance("DES" );
Secret Key key = keyFactory.generateSecret( dks );
// Cipher对象实际完成加密操作
Cipher cipher = Cipher.getInstance( "DES" );
// 用密钥初始化Cipher对象
cipher.init( Cipher.ENCRYPT_MODE, key, sr );
// 通过读类文件获取需要加密的数据
Byte data [] = Util.readFile (filename);
// 执行加密操作
Byte encryptedClassData [] = cipher.doFinal(data );
// 保存加密后的文件,覆盖原有的类文件。
Util.writeFile( filename, encryptedClassData );
(3)解密数据。运行经过加密的程序时,ClassLoader分析并解密类文件。操作步骤如下所示。
- 本文关键词:

