1、IDEA演算法介紹
IDEA是International Data Encryption Algorithm的縮寫,即“國際資料加密演算法”。
IDEA演算法由上海交通大學教授來學嘉與瑞士學者James Massey聯合設計開發,於1990年釋出,並在1992年進行了最佳化。
IDEA演算法是三大對稱加密演算法之一,除了IDEA另外的兩種是DES和AES,不過IDEA使用的廣泛性和影響力遠不如DES和AES。
2、IDEA演算法的Java實現在JDK中沒有對IDEA演算法的預設支援,如果使用IDEA演算法,需要依賴第三方安全演算法提供商。
Bouncy Castle提供了對IDEA演算法的較好支援,如果用Maven開發工具,並使用Bouncy Castle的IDEA演算法,需要在pom.xml檔案中加入bcprov-jdk15on依賴,例如:
<dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk15on</artifactId> <version>1.66</version></dependency>
3、使用IDEA演算法的例子程式
這個例子程式,使用了Bouncy Castle的IDEA演算法,程式碼如下:
package com.flying.idea;import org.bouncycastle.jce.provider.BouncyCastleProvider;import org.springframework.boot.SpringApplication;import org.springframework.boot.autoconfigure.SpringBootApplication;import javax.crypto.BadPaddingException;import javax.crypto.Cipher;import javax.crypto.IllegalBlockSizeException;import javax.crypto.NoSuchPaddingException;import javax.crypto.spec.SecretKeySpec;import java.security.InvalidKeyException;import java.security.NoSuchAlgorithmException;import java.security.Security;@SpringBootApplicationpublic class IdeaApplication { public static void main(String[] args) throws NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, BadPaddingException, IllegalBlockSizeException { SpringApplication.run(IdeaApplication.class, args); Security.addProvider(new BouncyCastleProvider()); byte[] keyBytes = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16}; printBytes("Key of IDEA is ", keyBytes); SecretKeySpec secretKeySpec = new SecretKeySpec(keyBytes, "IDEA"); byte[] plainBytes = {'A', 'B', 'C', 'D', 'E', 'F'}; printBytes("Plain text of IDEA is", plainBytes); Cipher cipher = Cipher.getInstance("IDEA/ECB/ISO10126Padding"); cipher.init(Cipher.ENCRYPT_MODE, secretKeySpec); byte[] encrytedBytes = cipher.doFinal(plainBytes); printBytes("Encryped text of IDEA is", encrytedBytes); cipher.init(Cipher.DECRYPT_MODE, secretKeySpec); byte[] decryptedBytes = cipher.doFinal(encrytedBytes); printBytes("Decrypted text of IDEA is", decryptedBytes); } private static void printBytes(String prompt, byte[] bytes){ if (prompt == null || bytes == null){ return; } System.out.print(prompt + ":"); for (int i=0; i<bytes.length; i++){ System.out.printf(" %02X", bytes[i]); } System.out.println(); }}
程式執行的情況如下:
4、程式邏輯解釋上面程式的邏輯是:
(1)Security.addProvider(new BouncyCastleProvider())表示使用Bouncy Castle提供的加密解密功能;
(2)IDEA使用的金鑰為16位元組的01 02 03 04 05 06 07 08 09 0A 0B 0C 0D 0E 0F 10(十六進位制表示);
(3)對41 42 43 44 45 46進行IDEA加密,得到8F 59 A0 ED 46 A4 0E 1B;
(4)對8F 59 A0 ED 46 A4 0E 1B進行IDEA解密,得到41 42 43 44 45 46。
從程式執行時列印的資訊來看,IDEA演算法被正常呼叫。
最新評論