標籤:class 計數器 cipher ble 編程 nts 重要 decrypt href
轉載請註明出處:http://blog.csdn.net/smartbetter/article/details/54017759
有兩句話是這麼說的:
1)演算法和資料結構就是編程的一個重要部分,你若失掉了演算法和資料結構,你就把一切都失掉了。
2)編程就是演算法和資料結構,演算法和資料結構是編程的靈魂。
注意,這可不是我說的,是無數程式員總結的,話說的很實在也很精闢,若想長久可持續發展,多研究演算法還是很有必要的,今天我給大家說說密碼編譯演算法中的對稱式加密演算法,並且這裡將教會大家對稱式加密演算法的編程使用。包含DES、3DES和AES三種對稱式加密演算法的編程使用,乾貨滿滿。
1.對稱密碼演算法
對稱密碼演算法是當今應用範圍最廣,使用頻率最高的密碼編譯演算法。它不僅應用於軟體行業,在硬體行業同樣流行。各種基礎設施凡是涉及到安全需求,都會優先考慮對稱式加密演算法。
對稱密碼演算法的加密金鑰和解密密鑰相同,對於大多數對稱密碼演算法,加解密過程互逆。
(1)加解密通訊模型
(2)特點:演算法公開、計算量小、加密速度快、加密效率高
(3)弱點:雙方都使用同樣密鑰,安全性得不到保證
對稱密碼有流密碼和分組密碼兩種,但是現在普遍使用的是分組密碼:
(4)分組密碼工作模式
1)ECB:電子密碼本(最常用的,每次加密均產生獨立的密文分組,並且對其他的密文分組不會產生影響,也就是相同的明文加密後產生相同的密文)2)CBC:密文連結(常用的,明文加密前需要先和前面的密文進行異或運算,也就是相同的明文加密後產生不同的密文)除了這兩種常用的工作模式,還有:3)CFB:密文反饋4)OFB:輸出反饋5)CTR:計數器
這五種工作模式主要是密碼學中演算法在進行推導演算的時候所應用到的。
6.分組密碼填充方式
1)NoPadding:無填充2)PKCS5Padding:3)ISO10126Padding:
7.常用對稱密碼:
1)DES(Data Encryption Standard,資料加密標準)2)3DES(Triple DES、DESede,進行了三重DES加密的演算法)3)AES(Advanced Encryption Standard,進階資料加密標準,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 三種演算法實現 對稱式加密:
2.DES演算法
1.DES:資料加密標準,是對稱式加密演算法領域中的典型演算法
2.特點:密鑰偏短(56位)、生命週期短(避免被破解)
3.Java實現
1)產生密鑰
KeyGenerator keyGen = KeyGenerator.getInstance("DES");//金鑰產生器keyGen.init(56);//初始化金鑰產生器SecretKey secretKey = keyGen.generateKey();//產生密鑰byte[] key = secretKey.getEncoded();//密鑰位元組數組
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
我們可以發現,加密解密我們只是設定了不同的模式而已。
3.3DES演算法
1.3DES:將密鑰長度增至112位或168位,通過增加迭代次數提高安全性
2.缺點:處理速度較慢、密鑰計算時間較長、加密效率不高
3.Java實現
1)產生密鑰
KeyGenerator keyGen = KeyGenerator.getInstance("DESede");//金鑰產生器keyGen.init(168); //可指定密鑰長度為112或168,預設為168 SecretKey secretKey = keyGen.generateKey();//產生密鑰byte[] key = secretKey.getEncoded();//密鑰位元組數組
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:進階資料加密標準,能夠有效抵禦已知的針對DES演算法的所有攻擊
2.特點:密鑰建立時間短、靈敏性好、記憶體需求低、安全性高
3.Java實現
1)產生密鑰
KeyGenerator keyGen = KeyGenerator.getInstance("AES");//金鑰產生器keygen.init(128); //預設128,獲得無政策許可權後可為192或256SecretKey secretKey = keyGen.generateKey();//產生密鑰byte[] key = secretKey.getEncoded();//密鑰位元組數組
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 三種演算法進行了工具類編寫,地址:https://github.com/smartbetter/Android-UtilsLibrary (新增DES/3DES/AES工具類)。
到此,DES / 3DES / AES 三種演算法實現 對稱式加密 就說完了,喜歡記得“頂”一下哦!
Java利用 DES / 3DES / AES 這三種演算法分別實現 對稱式加密