对称密码的编程使用(DES、3DES、AES)
生活随笔
收集整理的這篇文章主要介紹了
对称密码的编程使用(DES、3DES、AES)
小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.
對稱密碼的概念
- 加密密鑰和解密密鑰相同,對于大多數(shù)對稱密碼算法,加解密過程互逆
- 加解密通信模型
- 特點:算法公開、計算量小、加密速度快、加密效率高
- 弱點:雙方都使用同樣密鑰,安全性得不到保證
DES 算法的編程使用(密鑰偏短(56位)、生命周期短)
package com.crypt.des;import com.crypt.ByteToHexUtil;import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec;/*** des加密* Created by zhangweixiang on 4/17/2016.*/ public class DESUtil {/*** 生成desckey* @param type* @return* @throws Exception*/public static byte[] generateKey(String type) throws Exception {KeyGenerator keyGenerator = KeyGenerator.getInstance(type);keyGenerator.init(56);SecretKey secretKey = keyGenerator.generateKey();return secretKey.getEncoded();}/*** 通過指定的deskey加密* @param data 加密的數(shù)據(jù)* @param key 秘鑰* @param type 加密方式* @return 加密信息* @throws Exception*/public static byte[] encrypt(byte[] data,byte[] key,String type) throws Exception {SecretKey secretKey = new SecretKeySpec(key,type);Cipher cipher = Cipher.getInstance(type);cipher.init(Cipher.ENCRYPT_MODE,secretKey);return cipher.doFinal(data);}/*** des解密* @param data 需要解密的數(shù)據(jù)* @param key 解密秘鑰* @param type 類型* @return 解密后的結(jié)果* @throws Exception*/public static byte[] decrypt(byte[] data,byte[] key,String type) throws Exception {SecretKey secretKey = new SecretKeySpec(key,type);Cipher cipher = Cipher.getInstance(type);cipher.init(Cipher.DECRYPT_MODE,secretKey);return cipher.doFinal(data);}public static void main(String[] args) throws Exception {String data = "test desc";String type = "DES";// DES/ECB/PKCS5Paddingbyte[] key = DESUtil.generateKey(type);byte[] encData = DESUtil.encrypt(data.getBytes(),key,type);String encDataStr = ByteToHexUtil.bytesToHexString(encData);System.out.println(data+">>des encrypt>>"+encDataStr);byte[] decData = DESUtil.decrypt(encData,key,type);System.out.println(encDataStr+">>des decrypt>>"+new String(decData));} }
3DES 算法的編程使用
將密鑰長度增至112位或168位,通過增加迭代次數(shù)提高安全性
缺點:處理速度較慢、密鑰計算時間較長、加密效率不高
package com.crypt.des;import com.crypt.ByteToHexUtil;import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec;/*** 3des加密* Created by zhangweixiang on 4/17/2016.*/ public class TripleDESUtils {/*** 生成3desckey* @param type* @return* @throws Exception*/public static byte[] generateKey(String type) throws Exception {KeyGenerator keyGenerator = KeyGenerator.getInstance(type);keyGenerator.init(112);//128 168SecretKey secretKey = keyGenerator.generateKey();return secretKey.getEncoded();}/*** 通過指定的3deskey加密* @param data 加密的數(shù)據(jù)* @param key 秘鑰* @param type 加密方式* @return 加密信息* @throws Exception*/public static byte[] encrypt(byte[] data,byte[] key,String type) throws Exception {SecretKey secretKey = new SecretKeySpec(key,type);Cipher cipher = Cipher.getInstance(type);cipher.init(Cipher.ENCRYPT_MODE,secretKey);return cipher.doFinal(data);}/*** 3des解密* @param data 需要解密的數(shù)據(jù)* @param key 解密秘鑰* @param type 類型* @return 解密后的結(jié)果* @throws Exception*/public static byte[] decrypt(byte[] data,byte[] key,String type) throws Exception {SecretKey secretKey = new SecretKeySpec(key,type);Cipher cipher = Cipher.getInstance(type);cipher.init(Cipher.DECRYPT_MODE,secretKey);return cipher.doFinal(data);}public static void main(String[] args) throws Exception {String data = "test desc";String type = "DESede";// DES/ECB/PKCS5Paddingbyte[] key = TripleDESUtils.generateKey(type);byte[] encData = TripleDESUtils.encrypt(data.getBytes(),key,type);String encDataStr = ByteToHexUtil.bytesToHexString(encData);System.out.println(data+">>3des encrypt>>"+encDataStr);byte[] decData = TripleDESUtils.decrypt(encData,key,type);System.out.println(encDataStr+">>3des decrypt>>"+new String(decData));} }
AES 算法的編程使用
1.AES:高級數(shù)據(jù)加密標準,能夠有效抵御已知的針對DES算法的所有攻擊
2.特點:密鑰建立時間短、靈敏性好、內(nèi)存需求低、安全性高
package com.crypt.des;import com.crypt.ByteToHexUtil;import javax.crypto.Cipher; import javax.crypto.KeyGenerator; import javax.crypto.SecretKey; import javax.crypto.spec.SecretKeySpec;/*** aes加密/解密* Created by zhangweixiang on 4/17/2016.*/ public class AESUtil {/*** 生成adesckey* @param type* @return* @throws Exception*/public static byte[] generateKey(String type) throws Exception {KeyGenerator keyGenerator = KeyGenerator.getInstance(type);keyGenerator.init(128);//默認為128位,如果使用192 256則需獲取無政策文件(從oracle官網(wǎng)下載UnlimitedJECPolicyJDK7解壓后將//其中的2個jar拷貝到j(luò)re下的lib下的security中即可 )SecretKey secretKey = keyGenerator.generateKey();return secretKey.getEncoded();}/*** 通過指定的aeskey加密* @param data 加密的數(shù)據(jù)* @param key 秘鑰* @param type 加密方式* @return 加密信息* @throws Exception*/public static byte[] encrypt(byte[] data,byte[] key,String type) throws Exception {SecretKey secretKey = new SecretKeySpec(key,type);Cipher cipher = Cipher.getInstance(type);cipher.init(Cipher.ENCRYPT_MODE,secretKey);return cipher.doFinal(data);}/*** aes解密* @param data 需要解密的數(shù)據(jù)* @param key 解密秘鑰* @param type 類型* @return 解密后的結(jié)果* @throws Exception*/public static byte[] decrypt(byte[] data,byte[] key,String type) throws Exception {SecretKey secretKey = new SecretKeySpec(key,type);Cipher cipher = Cipher.getInstance(type);cipher.init(Cipher.DECRYPT_MODE,secretKey);return cipher.doFinal(data);}public static void main(String[] args) throws Exception {String data = "test desc";String type = "AES";//AES/ECB/PKCS5Paddingbyte[] key = AESUtil.generateKey(type);byte[] encData = AESUtil.encrypt(data.getBytes(),key,type);String encDataStr = ByteToHexUtil.bytesToHexString(encData);System.out.println(data+">>aes encrypt>>"+encDataStr);byte[] decData = AESUtil.decrypt(encData,key,type);System.out.println(encDataStr+">>aes decrypt>>"+new String(decData));} }總結(jié)
以上是生活随笔為你收集整理的对称密码的编程使用(DES、3DES、AES)的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 消息摘要的编程使用(MD5、SHA、HM
- 下一篇: Oauth 2.0概述