Java 對稱加密幾種算法分別實現(xiàn)
Java 對稱加密使用DES / 3DES / AES 這三種算法分別實現(xiàn)
有兩句話是這么說的:
1)算法和數(shù)據(jù)結構就是編程的一個重要部分,你若失掉了算法和數(shù)據(jù)結構,你就把一切都失掉了。
2)編程就是算法和數(shù)據(jù)結構,算法和數(shù)據(jù)結構是編程的靈魂。
注意,這可不是我說的,是無數(shù)程序員總結的,話說的很實在也很精辟,若想長久可持續(xù)發(fā)展,多研究算法還是很有必要的,今天我給大家說說加密算法中的對稱加密算法,并且這里將教會大家對稱加密算法的編程使用。包含DES、3DES和AES三種對稱加密算法的編程使用,干貨滿滿。
1.對稱密碼算法
對稱密碼算法是當今應用范圍最廣,使用頻率最高的加密算法。它不僅應用于軟件行業(yè),在硬件行業(yè)同樣流行。各種基礎設施凡是涉及到安全需求,都會優(yōu)先考慮對稱加密算法。
對稱密碼算法的加密密鑰和解密密鑰相同,對于大多數(shù)對稱密碼算法,加解密過程互逆。
(1)加解密通信模型
(2)特點:算法公開、計算量小、加密速度快、加密效率高
(3)弱點:雙方都使用同樣密鑰,安全性得不到保證
對稱密碼有流密碼和分組密碼兩種,但是現(xiàn)在普遍使用的是分組密碼:
(4)分組密碼工作模式
1)ECB:電子密碼本(最常用的,每次加密均產(chǎn)生獨立的密文分組,并且對其他的密文分組不會產(chǎn)生影響,也就是相同的明文加密后產(chǎn)生相同的密文)
2)CBC:密文鏈接(常用的,明文加密前需要先和前面的密文進行異或運算,也就是相同的明文加密后產(chǎn)生不同的密文)
除了這兩種常用的工作模式,還有:
3)CFB:密文反饋
4)OFB:輸出反饋
5)CTR:計數(shù)器
這五種工作模式主要是密碼學中算法在進行推導演算的時候所應用到的。
6.分組密碼填充方式
1)NoPadding:無填充
2)PKCS5Padding:
3)ISO10126Padding:
7.常用對稱密碼:
1)DES(Data Encryption Standard,數(shù)據(jù)加密標準)
2)3DES(Triple DES、DESede,進行了三重DES加密的算法)
3)AES(Advanced Encryption Standard,高級數(shù)據(jù)加密標準,AES算法可以有效抵制針對DES的攻擊算法)
先來看一下這三種算法的簡單對比:
算法 | 密鑰長度 | 默認密鑰長度 | 工作模式 | 填充方式 |
---|---|---|---|---|
DES | 56 | 56 | ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 | NoPadding、PKCS5Padding、ISO10126Padding |
3DES | 112、168 | 168 | ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 | NoPadding、PKCS5Padding、ISO10126Padding |
AES | 128、192、256 | 128 | ECB、CBC、PCBC、CTR、CTS、CFB、CFB8-CFB128、OFB、OFB8-OFB128 | NoPadding、PKCS5Padding、ISO10126Padding |
下面我們看如何使用 DES / 3DES / AES 三種算法實現(xiàn) 對稱加密:
2.DES算法
1.DES:數(shù)據(jù)加密標準,是對稱加密算法領域中的典型算法
2.特點:密鑰偏短(56位)、生命周期短(避免被破解)
3.Java實現(xiàn)
1)生成密鑰
KeyGenerator keyGen = KeyGenerator.getInstance("DES");//密鑰生成器 keyGen.init(56);//初始化密鑰生成器 SecretKey secretKey = keyGen.generateKey();//生成密鑰 byte[] key = secretKey.getEncoded();//密鑰字節(jié)數(shù)組
2)加密
SecretKey secretKey = new SecretKeySpec(key, "DES");//恢復密鑰 Cipher cipher = Cipher.getInstance("DES");//Cipher完成加密或解密工作類 cipher.init(Cipher.ENCRYPT_MODE, secretKey);//對Cipher初始化,加密模式 byte[] cipherByte = cipher.doFinal(data);//加密data
3)解密
SecretKey secretKey = new SecretKeySpec(key, "DES");//恢復密鑰 Cipher cipher = Cipher.getInstance("DES");//Cipher完成加密或解密工作類 cipher.init(Cipher.DECRYPT_MODE, secretKey);//對Cipher初始化,解密模式 byte[] cipherByte = cipher.doFinal(data);//解密data
我們可以發(fā)現(xiàn),加密解密我們只是設置了不同的模式而已。
3.3DES算法
1.3DES:將密鑰長度增至112位或168位,通過增加迭代次數(shù)提高安全性
2.缺點:處理速度較慢、密鑰計算時間較長、加密效率不高
3.Java實現(xiàn)
1)生成密鑰
KeyGenerator keyGen = KeyGenerator.getInstance("DESede");//密鑰生成器 keyGen.init(168); //可指定密鑰長度為112或168,默認為168 SecretKey secretKey = keyGen.generateKey();//生成密鑰 byte[] key = secretKey.getEncoded();//密鑰字節(jié)數(shù)組
2)3DES加密
SecretKey secretKey = new SecretKeySpec(key, "DESede");//恢復密鑰 Cipher cipher = Cipher.getInstance("DESede");//Cipher完成加密或解密工作類 cipher.init(Cipher.ENCRYPT_MODE, secretKey);//對Cipher初始化,解密模式 byte[] cipherByte = cipher.doFinal(data);//加密data
3)3DES解密
SecretKey secretKey = new SecretKeySpec(key, "DESede");//恢復密鑰 Cipher cipher = Cipher.getInstance("DESede");//Cipher完成加密或解密工作類 cipher.init(Cipher.DECRYPT_MODE, secretKey);//對Cipher初始化,解密模式 byte[] cipherByte = cipher.doFinal(data);//解密data
4.AES算法(推薦使用)
1.AES:高級數(shù)據(jù)加密標準,能夠有效抵御已知的針對DES算法的所有攻擊
2.特點:密鑰建立時間短、靈敏性好、內存需求低、安全性高
3.Java實現(xiàn)
1)生成密鑰
KeyGenerator keyGen = KeyGenerator.getInstance("AES");//密鑰生成器 keygen.init(128); //默認128,獲得無政策權限后可為192或256 SecretKey secretKey = keyGen.generateKey();//生成密鑰 byte[] key = secretKey.getEncoded();//密鑰字節(jié)數(shù)組
2)AES加密
SecretKey secretKey = new SecretKeySpec(key, "AES");//恢復密鑰 Cipher cipher = Cipher.getInstance("AES");//Cipher完成加密或解密工作類 cipher.init(Cipher.ENCRYPT_MODE, secretKey);//對Cipher初始化,解密模式 byte[] cipherByte = cipher.doFinal(data);//加密data
3)AES解密
SecretKey secretKey = new SecretKeySpec(key, "AES");//恢復密鑰 Cipher cipher = Cipher.getInstance("AES");//Cipher完成加密或解密工作類 cipher.init(Cipher.DECRYPT_MODE, secretKey);//對Cipher初始化,解密模式 byte[] cipherByte = cipher.doFinal(data);//解密data
為了方便使用,我對DES / 3DES / AES 三種算法進行了工具類編寫,
地址:http://xiazai.jb51.net/201701/yuanma/Android-UtilsLibrary-master(jb51.net).rar(新增DES/3DES/AES工具類)。
到此,DES / 3DES / AES 三種算法實現(xiàn) 對稱加密 就說完了.
感謝閱讀,希望能幫助到大家,謝謝大家對本站的支持!
相關文章
SpringMVC獲取請求參數(shù)實現(xiàn)方法介紹
Spring MVC 是 Spring 提供的一個基于 MVC 設計模式的輕量級 Web 開發(fā)框架,本質上相當于 Servlet,Spring MVC 角色劃分清晰,分工明細,這篇文章主要介紹了SpringMVC實現(xiàn)獲取請求參數(shù)方法2022-11-11Spring Security實現(xiàn)禁止用戶重復登陸的配置原理
這篇文章主要介紹了Spring Security實現(xiàn)禁止用戶重復登陸的配置原理,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下2019-12-12使用SpringBoot發(fā)送郵箱驗證碼的簡單實現(xiàn)
這篇文章主要介紹了使用SpringBoot發(fā)送郵箱驗證碼的簡單實現(xiàn),咱們今天來講使用QQ郵箱來發(fā)送和接收驗證碼,首先來介紹一下它在SpringBoot項目中的具體應用,需要的朋友可以參考下2023-04-04grade構建閱讀spring源碼環(huán)境 Idea2020.3的過程
這篇文章主要介紹了grade構建閱讀spring源碼環(huán)境 Idea2020.3,本文分步驟通過圖文并茂的形式給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-10-10java8 對象轉Map時重復 key Duplicate key xxxx的解決
這篇文章主要介紹了java8 對象轉Map時重復 key Duplicate key xxxx的解決方案,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教2021-09-09