JAVA对称加密算法汇总及实现

一、DES算法 
   设置算法及参数 
Java代码  
  1. //算法名称  
  2. public static final String KEY_ALGORITHM = "DES";  
  3. //算法名称/加密模式/填充方式  
  4. public static final String CIPHER_ALGORITHM = "DES/ECB/PKCS5Padding";  

   生成密钥 
Java代码  
  1. KeyGenerator keyGenerator = KeyGenerator.getInstance(KEY_ALGORITHM);  
  2. keyGenerator.init(56);  
  3. SecretKey secretKey = keyGenerator.generateKey();  
  4. return secretKey.getEncoded();  

   还原密钥 
Java代码  
  1. private static Key toKey(byte[] key) {  
  2.     DESKeySpec des = new DESKeySpec(key);  
  3.     SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(KEY_ALGORITHM);  
  4.     SecretKey secretKey = keyFactory.generateSecret(des);  
  5.     return secretKey;  
  6. }  

    加密 
Java代码  
  1. public static byte[] encrypt(byte[] data ,byte[] key) {  
  2.     Key k = toKey(key);  
  3.     Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);  
  4.     cipher.init(Cipher.ENCRYPT_MODE, k);  
  5.     return cipher.doFinal();  
  6. }  

     解密 
Java代码  
  1. Key k = toKey(key);  
  2. Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);  
  3. cipher.init(Cipher.DECRYPT_MODE, k);  
  4. return cipher.doFinal();  

注:加密和解密的区别在于init初始化时模式  
二、三重DES---DESede 
    其过程同上只需把变声明算法改变一下,Java6支持的密钥长度为112或168 
Java代码  
  1. //算法名称  
  2. public static final String KEY_ALGORITHM = "DESede";  
  3. //算法名称/加密模式/填充方式  
  4. public static final String CIPHER_ALGORITHM = "DESede/ECB/PKCS5Padding";  

   还原密钥 
Java代码   收藏代码
  1. DESedeKeySpec des = new DESedeKeySpec(key);  
  2.         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(KEY_ALGORITHM);  
  3.         SecretKey secretKey = keyFactory.generateSecret(des);  

三、AES算法 
   同DES基本一致。 
Java代码  
  1. public static final String KEY_ALGORITHM = "AES";  
  2. public static final String CIPHER_ALGORITHM = "AES/ECB/PKCS5Padding";  
  3. private static Key toKey(byte[] key){  
  4.     SecretKey secretKey = new SecretKeySpec(key, KEY_ALGORITHM);  
  5.     return secretKey;  
  6. }  

四、IDEA 同AES算法一致。 
Java代码  
  1. public static final String KEY_ALGORITHM = "IDEA";  
  2. public static final String CIPHER_ALGORITHM = "IDEA/ECB/PKCS5Padding";  
  3. private static Key toKey(byte[] key){  
  4.     SecretKey secretKey = new SecretKeySpec(key, KEY_ALGORITHM);  
  5.     return secretKey;  
  6. }  


五、基本口令加密---PBE 
Java代码  
  1. import java.security.Key;  
  2. import java.security.SecureRandom;  
  3.   
  4. import javax.crypto.Cipher;  
  5. import javax.crypto.SecretKey;  
  6. import javax.crypto.SecretKeyFactory;  
  7. import javax.crypto.spec.PBEKeySpec;  
  8. import javax.crypto.spec.PBEParameterSpec;  
  9.   
  10. public class PBECode {  
  11.     public static final String ALGORITHM = "PBEWITHMD5andDES";  
  12.     //迭代次数  
  13.     public static final int ITERATION_COUNT = 100;  
  14.     /** 
  15.      * 盐初始化<br> 
  16.      * 盐长度必须为8字节 
  17.      * @return byte[] 盐 
  18.      */  
  19.     public static byte[] initSalt(){  
  20.         //实例化安全随机数  
  21.         SecureRandom random = new SecureRandom();  
  22.         //生产盐  
  23.         return random.generateSeed(8);  
  24.     }  
  25.     /** 
  26.      * 转换密钥 
  27.      * @param password 密码 
  28.      * @return key 密钥 
  29.      * @throws Exception 
  30.      */  
  31.     private static Key toKey(String password)throws Exception{  
  32.         //密钥材料转换  
  33.         PBEKeySpec keySpec = new PBEKeySpec(password.toCharArray());  
  34.         //实例化  
  35.         SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(ALGORITHM);  
  36.         SecretKey secretKey = keyFactory.generateSecret(keySpec);  
  37.         return secretKey;  
  38.     }  
  39.     /** 
  40.      * 加密 
  41.      * @param data 数据 
  42.      * @param password 密码 
  43.      * @param salt 盐 
  44.      * @return byte[] 加密数据 
  45.      * @throws Exception 
  46.      */  
  47.     public static byte[] encrypt(byte[] data,String password,byte[] salt) throws Exception{  
  48.         Key key = toKey(password);  
  49.         //实例化PBE参数材料  
  50.         PBEParameterSpec parameterSpec = new PBEParameterSpec(salt, ITERATION_COUNT);  
  51.         Cipher cipher = Cipher.getInstance(ALGORITHM);  
  52.         cipher.init(Cipher.ENCRYPT_MODE, key,parameterSpec);  
  53.         return cipher.doFinal(data);  
  54.     }  
  55.     public static byte[] decrypt(byte[] data, String password,byte[] salt) throws Exception{  
  56.         Key key = toKey(password);  
  57.         //实例化PBE参数材料  
  58.         PBEParameterSpec parameterSpec = new PBEParameterSpec(salt, ITERATION_COUNT);  
  59.         Cipher cipher = Cipher.getInstance(ALGORITHM);  
  60.         cipher.init(Cipher.DECRYPT_MODE, key,parameterSpec);  
  61.         return cipher.doFinal(data);  
  62.     }  
  63. }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值