在使用中发现,通过加密的字符串若是要进行传输,须要使用Base64进行编码,这样能保证加密信息的完整性,确保未来解密成功。java
import java.security.SecureRandom; import java.util.Base64; import javax.crypto.spec.DESKeySpec; import javax.crypto.SecretKeyFactory; import javax.crypto.SecretKey; import javax.crypto.Cipher; public class DES { /** * 测试方法 */ public static void main(String[] args) { String str = "你好,goldlone"; //密码最好是8的倍数 String password = "12345678"; String encryStr = DES.encrypt(str, password); System.out.println("加密结果:"+encryStr); String decryStr = DES.decrypt(encryStr, password); System.out.println("解密结果:"+decryStr); } /** * 进行加密操做 * 参数一:待加密的字符串,参数二:加密密钥 * 返回通过Base64编码后的字符串 * 编码格式为UTF-8 */ public static String encrypt(String encryptionStr, String password) { try{ byte[] encryptionBytes = encryptionStr.getBytes("UTF-8"); SecureRandom random = new SecureRandom(); DESKeySpec desKey = new DESKeySpec(password.getBytes()); // 建立一个密钥工厂,而后用它把DESKeySpec转换成 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); SecretKey securekey = keyFactory.generateSecret(desKey); // Cipher对象实际完成加密操做 Cipher cipher = Cipher.getInstance("DES"); // 用密钥初始化Cipher对象 cipher.init(Cipher.ENCRYPT_MODE, securekey, random); // 执行加密操做 byte[] encryptionBase64Bytes = Base64.getEncoder().encode(cipher.doFinal(encryptionBytes)); // 转换为字符串返回 return new String(encryptionBase64Bytes); }catch(Exception e){ e.printStackTrace(); } return null; } /** * 进行解密操做 * 参数一:待解密的字符串,参数二:加密密钥 * 返回解密后的字符串 */ public static String decrypt(String decryptionBase64Str, String password) { try { byte[] decryptionbytes = Base64.getDecoder().decode(decryptionBase64Str); // DES算法要求有一个可信任的随机数源 SecureRandom random = new SecureRandom(); // 建立一个DESKeySpec对象 DESKeySpec desKey = new DESKeySpec(password.getBytes()); // 建立一个密钥工厂 SecretKeyFactory keyFactory = SecretKeyFactory.getInstance("DES"); // 将DESKeySpec对象转换成SecretKey对象 SecretKey securekey = keyFactory.generateSecret(desKey); // Cipher对象实际完成解密操做 Cipher cipher = Cipher.getInstance("DES"); // 用密钥初始化Cipher对象 cipher.init(Cipher.DECRYPT_MODE, securekey, random); // 开始解密操做 return new String(cipher.doFinal(decryptionbytes), "UTF-8"); } catch (Exception e) { e.printStackTrace(); } return null; } }
运行结果:
加密结果:E5t/WSZKkVlr0Uw9cMdddQ==
解密结果:你好,goldlone算法