对称密码的编程使用(DES、3DES、AES)
生活随笔
收集整理的這篇文章主要介紹了
对称密码的编程使用(DES、3DES、AES)
小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.
對(duì)稱(chēng)密碼的概念
- 加密密鑰和解密密鑰相同,對(duì)于大多數(shù)對(duì)稱(chēng)密碼算法,加解密過(guò)程互逆
- 加解密通信模型
- 特點(diǎn):算法公開(kāi)、計(jì)算量小、加密速度快、加密效率高
- 弱點(diǎn):雙方都使用同樣密鑰,安全性得不到保證
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();}/*** 通過(guò)指定的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 類(lèi)型* @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 算法的編程使用
將密鑰長(zhǎng)度增至112位或168位,通過(guò)增加迭代次數(shù)提高安全性
缺點(diǎn):處理速度較慢、密鑰計(jì)算時(shí)間較長(zhǎng)、加密效率不高
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();}/*** 通過(guò)指定的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 類(lèi)型* @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:高級(jí)數(shù)據(jù)加密標(biāo)準(zhǔn),能夠有效抵御已知的針對(duì)DES算法的所有攻擊
2.特點(diǎn):密鑰建立時(shí)間短、靈敏性好、內(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);//默認(rèn)為128位,如果使用192 256則需獲取無(wú)政策文件(從oracle官網(wǎng)下載UnlimitedJECPolicyJDK7解壓后將//其中的2個(gè)jar拷貝到j(luò)re下的lib下的security中即可 )SecretKey secretKey = keyGenerator.generateKey();return secretKey.getEncoded();}/*** 通過(guò)指定的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 類(lèi)型* @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)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 消息摘要的编程使用(MD5、SHA、HM
- 下一篇: Oauth 2.0概述