日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

对称密码的编程使用(DES、3DES、AES)

發(fā)布時間:2023/12/15 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对称密码的编程使用(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)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。