64 位, 是要被加密或被解密的数据;Mode 为 DES 的
工作方式,有两种:加密或 解密.
DES 算法工作流程如下:若 Mode 为加密模式,则利用 Key 对数据 Data 进行加密, 生成 Data 的密码形式(64 位)作为 DES 的输出结果; 如 Mode 为解密模式,则利用 Key 对密码形式的数据 Data 进行解密,还 原为 Data 的明码形式 (64 位) 作为 DES 的输出结果. 在通信网络的两端, 双方约定一致的 Key,在通信的源点用 Key 对核心数据进行 DES 加密,然 后以密码形式在公共通信网(如电话网)中传输到
通信网络的终点,数据 到达目的地后,用同样的 Key 对密码数据进行解密,便再现了明码形式的
核心数据.这样,便保证了核心数据在公共通信网中传输的安全性和可靠 性.
也可以通过定期在通信网络的源端和目的端同时改用新的 Key,便能 更进一步提高数据的保密性. 利用 DES 算法加密的步骤
(1)生成一个安全密钥.在加密或解密任何数据之前需要有一个密 钥.密钥是随同被加密的应用
程序一起发布的一段数据,密钥代码如下所 示.
【生成一个密钥代码】
view plaincopy to clipboardprint? // 生成一个可信任的随机数源 SecureRandom 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 () ); // 生成一个可信任的随机数源 SecureRandom 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)加密数据.得到密钥之后,接下来就可以用它加密数据.如下 所示.
【用密钥加密原始数据】
view plaincopy to clipboardprint? // 产生一个可信任的随机数源
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 ); // 产生一个可信任的随机数源 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 )