首頁>技術>

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演算法被正常呼叫。

45
最新評論
  • BSA-TRITC(10mg/ml) TRITC-BSA 牛血清白蛋白改性標記羅丹明
  • 安全第10講——AES加密演算法的介紹和使用