【加密技术】对称加密算法(1):DES

一.对称加密:采用单钥密码系统的加密方法,同一个**可以同时用作信息的加密和解密,这种加密方法称为对称加密,也称为单**加密

二.对称加密算法中常用的算法有:DES3DES、TDEA、Blowfish、RC2、RC4、RC5IDEA、SKIPJACK、AES 等

三.优缺点:

对称加密算法的优点是算法公开、计算量小、加密速度快、加密效率高。
对称加密算法的缺点是在数据传送前,发送方和接收方必须商定好秘钥,然后使双方都能保存好秘钥。其次如果一方的秘钥被泄露,那么加密信息也就不安全了。另外,每对用户每次使用对称加密算法时,都需要使用其他人不知道的唯一秘钥,这会使得收、发双方所拥有的钥匙数量巨大,**管理成为双方的负担
【加密技术】对称加密算法(1):DES
DES 的实现方式:jdk 的实现 , BouncyCastle 的实现方式,两者的实现方式很相似,只是获取秘钥使用不同的累去获取 
[java] view plain copy
  1. /** 
  2.      * 生成秘钥  
  3.      * @return 
  4.      * @throws Exception 
  5.      */  
  6.     public static byte [] JDK_DES_GetSecretKey() throws Exception{  
  7.         KeyGenerator keyGenerator = KeyGenerator.getInstance("DES");  
  8.         keyGenerator.init(56);  // 秘钥的长度   
  9.         SecretKey secretKey = keyGenerator.generateKey();  
  10.         return secretKey.getEncoded();  
  11.     }  
  12.       
  13.     /** 
  14.      * 生成秘钥  
  15.      * @return 
  16.      * @throws Exception 
  17.      */  
  18.     public static byte [] BC_DES_GetSecretKey() throws Exception{  
  19.         Security.addProvider(new BouncyCastleProvider());  
  20.         KeyGenerator keyGenerator = KeyGenerator.getInstance("DES","BC");  
  21.         keyGenerator.init(56);  // 秘钥的长度   
  22.         SecretKey secretKey = keyGenerator.generateKey();  
  23.         return secretKey.getEncoded();  
  24.     }  
  25.       
  26.     /** 
  27.      * 使用  des 对数据进行加密  
  28.      * @param src    需要加密的数据 
  29.      * @param encryptKey   加密的秘钥  
  30.      * @return 
  31.      * @throws Exception 
  32.      */  
  33.     public static byte [] JDK_DES_Encrypt(String src,byte [] encryptKey) throws Exception{  
  34.         //Key 的转换  
  35.         DESKeySpec keySpec = new DESKeySpec(encryptKey);  
  36.         SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");  
  37.         Key secretKey = factory.generateSecret(keySpec);  
  38.           
  39.         //加密  
  40.         Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");  
  41.         cipher.init(Cipher.ENCRYPT_MODE, secretKey);  
  42.         byte [] result = cipher.doFinal(src.getBytes());  
  43.         return result;  
  44.     }  
  45.       
  46.     /** 
  47.      * 使用 des 对数据进行解密  
  48.      * @param bytes     需要解密的数组 
  49.      * @param encryptKey   解密的秘钥  
  50.      * @return 
  51.      * @throws Exception 
  52.      */  
  53.     public static String JDK_DES_Decrypt(byte [] encryptBytes ,byte [] encryptKey) throws Exception{  
  54.         //Key 的转换  
  55.         DESKeySpec keySpec = new DESKeySpec(encryptKey);  
  56.         SecretKeyFactory factory = SecretKeyFactory.getInstance("DES");  
  57.         Key secretKey = factory.generateSecret(keySpec);  
  58.           
  59.         //加密  
  60.         Cipher cipher = Cipher.getInstance("DES/ECB/PKCS5Padding");  
  61.         cipher.init(Cipher.DECRYPT_MODE, secretKey);  
  62.         String result = new String(cipher.doFinal(encryptBytes));  
  63.         return result;  
  64.     }  
  65.       
  66.     /** 
  67.      * 使用  des 对数据进行加密  
  68.      * @param src    需要加密的数据 
  69.      * @param encryptKey   加密的秘钥  
  70.      * @return 
  71.      * @throws Exception 
  72.      */  
  73.     public static byte [] BC_DES_Encrypt(String src,byte [] encryptKey) throws Exception{  
  74.         return JDK_DES_Encrypt(src,encryptKey);  
  75.     }  
  76.       
  77.     /** 
  78.      * 使用  des 对数据进行解密  
  79.      * @param bytes     需要解密的数组 
  80.      * @param encryptKey   解密的秘钥  
  81.      * @return 
  82.      * @throws Exception 
  83.      */  
  84.     public static String BC_DES_Decrypt(byte [] encryptBytes ,byte [] encryptKey) throws Exception{  
  85.         return JDK_DES_Decrypt(encryptBytes,encryptKey);  
  86.     }