Java加密解密之對稱加密算法AES_第1頁
Java加密解密之對稱加密算法AES_第2頁
Java加密解密之對稱加密算法AES_第3頁
Java加密解密之對稱加密算法AES_第4頁
Java加密解密之對稱加密算法AES_第5頁
已閱讀5頁,還剩4頁未讀 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權,請進行舉報或認領

文檔簡介

1、Java加密解密之對稱加密算法 AES本文轉(zhuǎn)自網(wǎng)絡密碼學中的高級加密標準(Advaneed Encryption Standard , AES),又稱 Rijndael 加密法,是美國聯(lián)邦政府采用的一種區(qū)塊加密標準。這個標準用來替代原先的DES,已經(jīng)被多方分析且廣為全世界所使用。經(jīng)過五年的甄選流程,高級加密標準由美國國家標準與技術研究院(NIST)于2001年11月26日發(fā)布于FIPS PUB 197,并在2002年5月26日成為有效的標準。2006年,高級加密標準已然成 為對稱密鑰加密中最流行的算法之一。該算法為比利時密碼學家Joan Daemen和Vincent Rijmen所設計,結(jié)合兩

2、位作者的名字,以 Rijndael之命名之,投稿 高級加密標準的甄選流程。(Rijdael的發(fā)音近于"Rhinedoll"。)AES是美國國家標準技術研究所 NIST旨在取代DES的21世紀的加密標準。AES的基本要求是,采用對稱分組密碼體制,密鑰長度的最少支持為128、192、 256,分組長度128位,算法應易于各種硬件和軟件實現(xiàn)。1998年NIST開始 AES第一輪分析、測試和征集,共產(chǎn)生了15個候選算法。1999年3月完成了第二輪AES2的分析、測試。2000年10月2日美國政府正式宣布選中比利時 密碼學家Joan Daemen和 Vincent Rijmen提出的

3、一種密碼算法 RIJNDAEL 作 為AES.在應用方面,盡管DES在安全上是脆弱的,但由于快速 DES芯片的大量生產(chǎn),使得DES仍能暫時繼續(xù)使用,為提高安全強度,通常使用獨立 密鑰的三級DES。但是DES遲早要被AES代替。流密碼體制較之分組密碼在 理論上成熟且安全,但未被列入下一代加密標準。AES加密數(shù)據(jù)塊和密鑰長度可以是 128比特、192比特、256比特中的任意一 個。AES加密有很多輪的重復和變換。大致步驟如下:1、密鑰擴展(KeyExpansion),2、初始輪(Initial Round),3、 重復輪(Rounds ),每一輪又包括:SubBytes、ShiftRows、Mix

4、Columns、 AddRoundKey ,4、最終輪(Final Round ),最終輪沒有 MixColumns。JDK對DESede算法的支持密鑰長度:128位工作模式:ECB/CBC/PCBC/CTR/CTS/CFB/CFB8 to CFB128/OFB/OBF8 toOFB128填充方式:Nopaddi ng/PKCS5Paddi ng/ISO10126Paddi ng/工作模式和填充方式請參考:JAVA加密解密基礎十六進制工具類Hex.java,見:java byte數(shù)組與十六進制字符串互轉(zhuǎn)AES加密解密的java實現(xiàn):AESCoder.javaJava代碼樹1.import ja

5、va.security.Key;2.import java.security.NoSuchAlgorithmException;3.4.import javax.crypto.Cipher;5.import javax.crypto.KeyGenerator;6.import javax.crypto.SecretKey;7.8import javax.crypto.spec.SecretKeySpec;9./*10.* AES Coder<br/>11.* secret key length: 128bit, default: 128 bit<br/>12.* mod

6、e: ECB/CBC/PCBC/CTR/CTS/CFB/CFB8 to CFB128/OFB/OBF8 to OFB128<br/>13.* padding: Nopadding/PKCS5Padding/ISO10126Padding/14.* author Aub15.*16.*/17.public class AESCoder 18.19./*20.*密鑰算法21.*/22.privatestatic final String KEY_ALGORITHM ="AES"23.24.privatestatic final String DEFAULT_CIPH

7、ER_ALGORITHM ="AES/ECB/PKCS5Padding"25.26./*27.*初始化密鑰28.*29.* return byte密鑰30.* throws Exception31.*/32.public staticbyte initSecretKey() 33./返回生成指定算法的秘密密鑰的KeyGenerator對象34.KeyGenerator kg =null ;try kg = KeyGenerator.getlnstance(KEY_ALGORITHM);catch (NoSuchAlgorithmException e) e.printSta

8、ckTrace();return new byte 0;/初始化此密鑰生成器,使其具有確定的密鑰大小/AES 要求密鑰長度為 128kg.init(128);/生成一個密鑰SecretKey secretKey = kg.generateKey(); return secretKey.getEncoded();/param data* param key * return byte*轉(zhuǎn)換密鑰* param key二進制密鑰* return密鑰*/private static Key toKey( byte key)/生成密鑰return new SecretKeySpec(key, KEY_A

9、LGORITHM);/* 加密* param data待加密數(shù)據(jù)* param key密鑰* return byte加密數(shù)據(jù)* throws ExceptionException*/public static byte encrypt( byte data,Key key) throws return encrypt(data, key,DEFAULT_CIPHER_ALGORITHM);/*35.36.37.38.39.40.41.42.43.44.45.46.47.48.49.50.51.52.53.54.55.56.57.58.59.60.61.62.63.64.65.66.67.68.

10、69.70.71.72.73.74.75.76.77.加密待加密數(shù)據(jù)二進制密鑰加密數(shù)據(jù)78.* throws Exception79.80.81.82.83.84.85.86.87.88.89.90.91.92.93.94.95.96.97.98.99.100.101.102.103.104.105.106.107.108.109.110.111.112.113.114.115.116.117.118.119.*/public static byte encrypt( byte data, byte key) throws Exception return encrypt(data, key,

11、DEFAULT_CIPHER_ALGORITHM);/param data待加密數(shù)據(jù)* param key密鑰* param cipherAlgorithm加密算法/工作模式/填充方式* return byte加密數(shù)據(jù)* throws Exception */public static byte encrypt( byte data,Key key,String cipherAlgorith m) throws Exception/實例化Cipher cipher = Cipher.getlnstance(cipherAlgorithm);/使用密鑰初始化,設置為加密模式cipher.init

12、(Cipher.ENCRYPT_MODE, key);/執(zhí)行操作return cipher.doFinal(data);加密* param data待加密數(shù)據(jù)* param key二進制密鑰* param cipherAlgorithm加密算法/工作模式/填充方式* return byte加密數(shù)據(jù)* throws Exception*/public static byte encrypt( byte data, byte key,String cipherAlgorit hm) throws Exception/還原密鑰Key k = toKey(key);return encrypt(dat

13、a, k, cipherAlgorithm);/*加密120./*121.*解密122.123.124.125.126.127.128.129.130.131.132.133.134.135.136.137.138.139.140.141.142.143.144.145.146.147.148.149.150.151.152.153.154.155.156.157.158.159.160.161.162.* param data待解密數(shù)據(jù)* param key二進制密鑰* return byte解密數(shù)據(jù)* throws Exception*/public static byte decrypt

14、( byte data, byte key) throws Exception return decrypt(data, key,DEFAULT_CIPHER_ALGORITHM);/*解密* param data待解密數(shù)據(jù)* param key密鑰* return byte解密數(shù)據(jù)* throws Exception*/public static byte decrypt( byte data,Key key)throws Exceptionreturn decrypt(data, key,DEFAULT_CIPHER_ALGORITHM);/*解密* param data待解密數(shù)據(jù)* pa

15、ram key二進制密鑰* param cipherAlgorithm加密算法/工作模式/填充方式* return byte解密數(shù)據(jù)* throws Exception*/public static byte decrypt( byte data, byte key,String cipherAlgori thm) throws Exception/還原密鑰Key k = toKey(key);return decrypt(data, k, cipherAlgorithm);/*解密* param data待解密數(shù)據(jù)163.* param key密鑰164.* param cipherAlgo

16、rithm加密算法/工作模式/填充方式165.* return byte解密數(shù)據(jù)166.* throws Exception167.*/168.public staticbyte decrypt(byte data,Key key,String cipherAlgorithm)throws Exception169./實例化170.Cipher cipher = Cipher.getlnstance(cipherAlgorithm);171./使用密鑰初始化,設置為解密模式172.cipher.init(Cipher.DECRYPT_MODE, key);173./執(zhí)行操作174.return

17、 cipher.doFinal(data);175.176.177.private static String showByteArray(byte data)178.if ( null = data)179.return null ;180.181.StringBuilder sb =new StringBuilder("");182.for (byte b:data)183.sb.append(b).append(",");184.185.sb.deleteCharAt(sb.length()-1);186.sb.append(""

18、;);187.return sb.toString();188.189.190.public staticvoid main(String args)throws Exception 191.byte key = initSecretKey();192.System.out.println("key : " +showByteArray(key);193.194.Key k = toKey(key);195.196.String data ="AES 數(shù)據(jù)";197.System.out.println("加密前數(shù)據(jù):string:"+data);198.System.out.println("加密前數(shù)據(jù):byte:"+showByteArray(data.getBytes();199.System.out.println();200.byte encryptData = encrypt(data.getBytes(), k);201.System.out.println("加密后數(shù)據(jù):byte:"+showByteArray(encryptData);202.System.ou

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論