; // 保存加密后的文件,覆盖原有的类文件. Util.writeFile( filename, encryptedClassData );
(3)解密数据.运行经过加密的程序时,ClassLoader 分析并解密类 文件.操作步骤如下所示.
【用密钥解密数据】
view plaincopy to clipboardprint? // 生成一个可信任的随机数源 SecureRandom sr = new SecureRandom(); // 从密钥文件中获取原始密钥数据 Byte rawKeyData = Util.readFile( keyFilename ); // 创建一个 DESKeySpec 对象 DESKeySpec dks = new DESKeySpec (rawKeyData); // 创建一个密钥工厂,然后用它把 DESKeySpec 对象转换成 Secret Key 对象 SecretKeyFactory key Factory = SecretKeyFactory.getInstance( "DES" ); SecretKey key = keyFactory.generateSecret( dks ); // Cipher 对象实际完成解密操作 Cipher cipher = Cipher.getInstance(
"DES" ); // 用密钥初始化 Cipher 对象 Cipher.init( Cipher.DECRYPT_MODE, key, sr ); // 获得经过加密的数据 Byte encrypted Data = Util.readFile (Filename); //执行解密操作 Byte decryptedData = cipher.doFinal( encryptedData ); // 然后将解密后的数据转化成原来的类文件. // 生成一个可信任的随机数源
SecureRandom sr = new SecureRandom(); // 从密钥文件中获取原始密钥数据 Byte rawKeyData = Util.readFile( keyFilename ); // 创建一个 DESKeySpec 对象 DESKeySpec dks = new DESKeySpec (rawKeyData); // 创建一个密钥工厂,然后用它把 DESKeySpec 对象转换成 Secret Key 对象 SecretKeyFactory key Factory = SecretKeyFactory.getInstance( "DES" ); SecretKey key = keyFactory.generateSecret( dks ); // Cipher 对象实际完成解密操作 Cipher cipher = Cipher.getInstance( "DES" ); // 用密钥初始化 Cipher 对象 Cipher.init( Cipher.DECRYPT_MODE, key, sr ); // 获得经过加密的数据 Byte encrypted Data = Util.readFile (Filename); //执行解密操作 Byte decryptedData = cipher.doFinal( encryptedData ); // 然后将解密后的数据转化成原来的类文件.
将上述代码与自定义的类装载器结合就可以做到边解密边运行,从而 起到保护源代码的作用.
结束语
加密/解密是数据传输中保证数据安全性和完整性的
常用方法,Java 语言因其平台无关性, Internet 上的应用非常之广泛. 在 使用 DES 算法加 密 Java 源码在一定程度上能保护软件的产权.