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

歡迎訪問 生活随笔!

生活随笔

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

编程问答

对称加密算法-DES以及DESede算法

發(fā)布時間:2025/3/15 编程问答 17 豆豆
生活随笔 收集整理的這篇文章主要介紹了 对称加密算法-DES以及DESede算法 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

一、簡述

? 對稱加密算法就是能將數(shù)據(jù)加解密。加密的時候用密鑰對數(shù)據(jù)進行加密,解密的時候使用同樣的密鑰對數(shù)據(jù)進行解密。

? DES是美國國家標準研究所提出的算法。因為加解密的數(shù)據(jù)安全性和密鑰長度成正比。des的56位的密鑰已經(jīng)形成安全隱患,在1998年之后就很少被采用。但是一些老舊的系統(tǒng)還在使用。因為這個des算法并沒有被美國標準委員會公布全部算法,大家一致懷疑被留了后門。所以慢慢就被淘汰掉了。

? 后來針對des算法進行了改進,有了三重des算法(DESede)。針對des算法的密鑰長度較短以及迭代次數(shù)偏少問題做了相應改進,提高了安全強度。不過desede算法處理速度較慢,密鑰計算時間較長,加密效率不高問題使得對稱加密算法的發(fā)展不容樂觀。

二、交互模型

1、消息傳遞雙方約定密鑰,通常由消息發(fā)送方(甲方)構建密鑰通知消息接收方(乙方)

2、甲方使用密鑰對數(shù)據(jù)記性加密,然后將加密后的數(shù)據(jù)通過網(wǎng)絡傳送給乙方

3、乙方接收到數(shù)據(jù),然后使用約定的密鑰對數(shù)據(jù)進行解密

?

整個模型很像hmac的數(shù)據(jù)交互過程,都是一個密鑰的概念,而且密鑰都是雙方知道的。但是hmac算法是信息摘要的獲取。這邊是對數(shù)據(jù)進行加解密

?

三、java6和bouncycastle針對des算法的數(shù)據(jù)加密支持還是不同的。體現(xiàn)在密鑰長度,工作模式以及填充方式上。這里bouncycastle的密鑰長度是64位。不過在DESede算法上bouncy castle也是密鑰長度比java6的密鑰長度要長。

??? 不過所有的對稱加密算法的實現(xiàn)還是類似的??梢詤⒖慈缦碌拇a:

1、des算法

[java] view plaincopy
  • package?com.ca.test;??
  • import?java.security.Key;??
  • import?javax.crypto.Cipher;??
  • import?javax.crypto.KeyGenerator;??
  • import?javax.crypto.SecretKey;??
  • import?javax.crypto.SecretKeyFactory;??
  • import?javax.crypto.spec.DESKeySpec;??
  • import?org.apache.commons.codec.binary.Base64;??
  • /**?
  • ?*?DES對稱加密算法?
  • ?*?@author?kongqz?
  • ?*?*/??
  • public?class?DESCoder?{??
  • ????/**?
  • ?????*?密鑰算法?
  • ?????*?java支持56位密鑰,bouncycastle支持64位?
  • ?????*?*/??
  • ????public?static?final?String?KEY_ALGORITHM="DES";??
  • ??????
  • ????/**?
  • ?????*?加密/解密算法/工作模式/填充方式?
  • ?????*?*/??
  • ????public?static?final?String?CIPHER_ALGORITHM="DES/ECB/PKCS5Padding";??
  • ??????
  • ????/**?
  • ?????*??
  • ?????*?生成密鑰,java6只支持56位密鑰,bouncycastle支持64位密鑰?
  • ?????*?@return?byte[]?二進制密鑰?
  • ?????*?*/??
  • ????public?static?byte[]?initkey()?throws?Exception{??
  • ??????????
  • ????????//實例化密鑰生成器??
  • ????????KeyGenerator?kg=KeyGenerator.getInstance(KEY_ALGORITHM);??
  • ????????//初始化密鑰生成器??
  • ????????kg.init(56);??
  • ????????//生成密鑰??
  • ????????SecretKey?secretKey=kg.generateKey();??
  • ????????//獲取二進制密鑰編碼形式??
  • ????????return?secretKey.getEncoded();??
  • ????}??
  • ????/**?
  • ?????*?轉(zhuǎn)換密鑰?
  • ?????*?@param?key?二進制密鑰?
  • ?????*?@return?Key?密鑰?
  • ?????*?*/??
  • ????public?static?Key?toKey(byte[]?key)?throws?Exception{??
  • ????????//實例化Des密鑰??
  • ????????DESKeySpec?dks=new?DESKeySpec(key);??
  • ????????//實例化密鑰工廠??
  • ????????SecretKeyFactory?keyFactory=SecretKeyFactory.getInstance(KEY_ALGORITHM);??
  • ????????//生成密鑰??
  • ????????SecretKey?secretKey=keyFactory.generateSecret(dks);??
  • ????????return?secretKey;??
  • ????}??
  • ??????
  • ????/**?
  • ?????*?加密數(shù)據(jù)?
  • ?????*?@param?data?待加密數(shù)據(jù)?
  • ?????*?@param?key?密鑰?
  • ?????*?@return?byte[]?加密后的數(shù)據(jù)?
  • ?????*?*/??
  • ????public?static?byte[]?encrypt(byte[]?data,byte[]?key)?throws?Exception{??
  • ????????//還原密鑰??
  • ????????Key?k=toKey(key);??
  • ????????//實例化??
  • ????????Cipher?cipher=Cipher.getInstance(CIPHER_ALGORITHM);??
  • ????????//初始化,設置為加密模式??
  • ????????cipher.init(Cipher.ENCRYPT_MODE,?k);??
  • ????????//執(zhí)行操作??
  • ????????return?cipher.doFinal(data);??
  • ????}??
  • ????/**?
  • ?????*?解密數(shù)據(jù)?
  • ?????*?@param?data?待解密數(shù)據(jù)?
  • ?????*?@param?key?密鑰?
  • ?????*?@return?byte[]?解密后的數(shù)據(jù)?
  • ?????*?*/??
  • ????public?static?byte[]?decrypt(byte[]?data,byte[]?key)?throws?Exception{??
  • ????????//歡迎密鑰??
  • ????????Key?k?=toKey(key);??
  • ????????//實例化??
  • ????????Cipher?cipher=Cipher.getInstance(CIPHER_ALGORITHM);??
  • ????????//初始化,設置為解密模式??
  • ????????cipher.init(Cipher.DECRYPT_MODE,?k);??
  • ????????//執(zhí)行操作??
  • ????????return?cipher.doFinal(data);??
  • ????}??
  • ????/**?
  • ?????*?@param?args?
  • ?????*?@throws?Exception??
  • ?????*/??
  • ????public?static?void?main(String[]?args)?throws?Exception?{??
  • ????????String?str="DES";??
  • ????????System.out.println("原文:"+str);??
  • ????????//初始化密鑰??
  • ????????byte[]?key=DESCoder.initkey();??
  • ????????System.out.println("密鑰:"+Base64.encodeBase64String(key));??
  • ????????//加密數(shù)據(jù)??
  • ????????byte[]?data=DESCoder.encrypt(str.getBytes(),?key);??
  • ????????System.out.println("加密后:"+Base64.encodeBase64String(data));??
  • ????????//解密數(shù)據(jù)??
  • ????????data=DESCoder.decrypt(data,?key);??
  • ????????System.out.println("解密后:"+new?String(data));??
  • ????}??
  • }??
  • 控制臺輸出結果:??
  • 原文:DES??
  • 密鑰:ocewbYVbtmE=??
  • 加密后:w6KsVSkLV3Q=??
  • 解密后:DES??
  • 2、desede算法演示

    [java] view plaincopy
  • package?com.ca.test;??
  • import?java.security.Key;??
  • import?javax.crypto.Cipher;??
  • import?javax.crypto.KeyGenerator;??
  • import?javax.crypto.SecretKey;??
  • import?javax.crypto.SecretKeyFactory;??
  • import?javax.crypto.spec.DESedeKeySpec;??
  • import?org.apache.commons.codec.binary.Base64;??
  • /**?
  • ?*?DESede對稱加密算法演示?
  • ?*?@author?kongqz?
  • ?*?*/??
  • public?class?DESedeCoder?{??
  • ????/**?
  • ?????*?密鑰算法?
  • ?????*?*/??
  • ????public?static?final?String?KEY_ALGORITHM="DESede";??
  • ??????
  • ????/**?
  • ?????*?加密/解密算法/工作模式/填充方式?
  • ?????*?*/??
  • ????public?static?final?String?CIPHER_ALGORITHM="DESede/ECB/PKCS5Padding";??
  • ??????
  • ????/**?
  • ?????*??
  • ?????*?生成密鑰?
  • ?????*?@return?byte[]?二進制密鑰?
  • ?????*?*/??
  • ????public?static?byte[]?initkey()?throws?Exception{??
  • ??????????
  • ????????//實例化密鑰生成器??
  • ????????KeyGenerator?kg=KeyGenerator.getInstance(KEY_ALGORITHM);??
  • ????????//初始化密鑰生成器??
  • ????????kg.init(168);??
  • ????????//生成密鑰??
  • ????????SecretKey?secretKey=kg.generateKey();??
  • ????????//獲取二進制密鑰編碼形式??
  • ????????return?secretKey.getEncoded();??
  • ????}??
  • ????/**?
  • ?????*?轉(zhuǎn)換密鑰?
  • ?????*?@param?key?二進制密鑰?
  • ?????*?@return?Key?密鑰?
  • ?????*?*/??
  • ????public?static?Key?toKey(byte[]?key)?throws?Exception{??
  • ????????//實例化Des密鑰??
  • ????????DESedeKeySpec?dks=new?DESedeKeySpec(key);??
  • ????????//實例化密鑰工廠??
  • ????????SecretKeyFactory?keyFactory=SecretKeyFactory.getInstance(KEY_ALGORITHM);??
  • ????????//生成密鑰??
  • ????????SecretKey?secretKey=keyFactory.generateSecret(dks);??
  • ????????return?secretKey;??
  • ????}??
  • ??????
  • ????/**?
  • ?????*?加密數(shù)據(jù)?
  • ?????*?@param?data?待加密數(shù)據(jù)?
  • ?????*?@param?key?密鑰?
  • ?????*?@return?byte[]?加密后的數(shù)據(jù)?
  • ?????*?*/??
  • ????public?static?byte[]?encrypt(byte[]?data,byte[]?key)?throws?Exception{??
  • ????????//還原密鑰??
  • ????????Key?k=toKey(key);??
  • ????????//實例化??
  • ????????Cipher?cipher=Cipher.getInstance(CIPHER_ALGORITHM);??
  • ????????//初始化,設置為加密模式??
  • ????????cipher.init(Cipher.ENCRYPT_MODE,?k);??
  • ????????//執(zhí)行操作??
  • ????????return?cipher.doFinal(data);??
  • ????}??
  • ????/**?
  • ?????*?解密數(shù)據(jù)?
  • ?????*?@param?data?待解密數(shù)據(jù)?
  • ?????*?@param?key?密鑰?
  • ?????*?@return?byte[]?解密后的數(shù)據(jù)?
  • ?????*?*/??
  • ????public?static?byte[]?decrypt(byte[]?data,byte[]?key)?throws?Exception{??
  • ????????//歡迎密鑰??
  • ????????Key?k?=toKey(key);??
  • ????????//實例化??
  • ????????Cipher?cipher=Cipher.getInstance(CIPHER_ALGORITHM);??
  • ????????//初始化,設置為解密模式??
  • ????????cipher.init(Cipher.DECRYPT_MODE,?k);??
  • ????????//執(zhí)行操作??
  • ????????return?cipher.doFinal(data);??
  • ????}??
  • ????/**?
  • ?????*?進行加解密的測試?
  • ?????*?@throws?Exception??
  • ?????*/??
  • ????public?static?void?main(String[]?args)?throws?Exception?{??
  • ????????String?str="DESede";??
  • ????????System.out.println("原文:/t"+str);??
  • ????????//初始化密鑰??
  • ????????byte[]?key=DESedeCoder.initkey();??
  • ????????System.out.println("密鑰:/t"+Base64.encodeBase64String(key));??
  • ????????//加密數(shù)據(jù)??
  • ????????byte[]?data=DESedeCoder.encrypt(str.getBytes(),?key);??
  • ????????System.out.println("加密后:/t"+Base64.encodeBase64String(data));??
  • ????????//解密數(shù)據(jù)??
  • ????????data=DESedeCoder.decrypt(data,?key);??
  • ????????System.out.println("解密后:/t"+new?String(data));??
  • ????}??
  • }??
  • 控制臺輸出結果:??
  • 原文:?DESede??
  • 密鑰:?BBDmwTjBsF7IwTIyGWt1bmFntRyUgMQL??
  • 加密后:????FM/DsEv3KgM=??
  • 解密后:????DESede??
  • 四、總結

    1、主要看設定密鑰的長度的變化。同時,bouncycastle支持更多的填充模式,在相同算法上比java6實現(xiàn)的版本的密鑰長度要長

    2、java的api中僅僅提供了DES,DESede和PBE 3三種對稱加密算法密鑰材料實現(xiàn)類

    總結

    以上是生活随笔為你收集整理的对称加密算法-DES以及DESede算法的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

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

    主站蜘蛛池模板: 免费精品视频在线观看 | 日韩一区二区视频在线播放 | 激情拍拍拍 | 久久久国产一区 | 欧美日韩国产在线 | 高潮疯狂过瘾粗话对白 | 亚洲精品免费在线 | 国产精品系列在线 | av在线专区| 黄色片国产 | 精品人妻无码一区二区三 | 午夜黄色剧场 | 精品国产乱码久久久久久1区2区 | 日日射影院 | 肥婆大荫蒂欧美另类 | 999这里只有精品 | 亚洲涩涩图 | 青青草原av | 久草在在线视频 | 亚洲一区二区蜜桃 | 中文字幕在线视频日韩 | 十大污网站| 成人黄色av网站 | 少女忠诚电影高清免费 | 免费插插视频 | 日韩有码在线视频 | 我们的生活第五季在线观看免费 | 亚洲人成色777777精品音频 | 91精品国产闺蜜国产在线闺蜜 | 日本55丰满熟妇厨房伦 | 91久久精品国产91久久性色tv | 91在线影院 | 双性娇喘浑圆奶水h男男漫画 | 97精品国产| 欧美日韩国产一区二区三区在线观看 | 日本伦理在线 | 久久久久亚洲av成人网人人网站 | 日韩少妇内射免费播放18禁裸乳 | 成人av在线播放网站 | 刘亦菲久久免费一区二区 | 久精品视频 | 亚洲h视频在线观看 | 污片免费看 | 成人av电影在线观看 | 国产免费网址 | 男人的天堂在线观看av | 综合久久一区 | 一区二区自拍偷拍 | 久久a视频| 青青青免费视频观看在线 | 日韩午夜三级 | 国产婷婷色一区二区在线观看 | 日本肉体xxxⅹ裸体交 | 国产成人麻豆精品午夜在线 | 麻豆www. | 日韩欧美亚洲国产精品字幕久久久 | 黑人一级视频 | 悠悠色综合网 | 91在线视频免费看 | 成人天堂| 天天操夜夜摸 | 青青草91久久久久久久久 | 亚洲成人高清 | 亚洲av成人无码久久精品老人 | 色噜噜日韩精品欧美一区二区 | 啪啪av网 | 烈性摔跤| 136fldh导航福利微拍 | 都市激情亚洲色图 | 手机免费av片| 亚洲不卡网 | av一级黄色片 | 五月天在线播放 | 爱情岛亚洲品质自拍极速福利网站 | www.199麻豆| 性色av蜜臀av色欲av | 欧美三级电影在线观看 | 日韩av网页 | 扶她futa粗大做到怀孕 | 日韩欧美一区二区三区四区五区 | 婷婷六月综合网 | 岛国成人在线 | 女人av在线| 毛片免费全部无码播放 | 杨幂一区二区三区免费看视频 | 免费午夜视频 | 污污视频网站 | 自拍偷拍精品视频 | 亚洲色婷婷久久精品av蜜桃 | 亚洲性激情| 尹人香蕉 | av不卡高清| 久久露脸| 亚洲一区二区三区在线播放 | 操bbbbb | 亚欧色视频 | 成年人国产视频 | 国产免费又黄又爽又色毛 | 成人免费在线播放视频 |