JAVA復号化13-対称暗号アルゴリズム-IDEAアルゴリズム(対称パケット暗号-華人学者が設計に参加した)

4034 ワード

一、DESアルゴリズムの代替品を探すと同時に、AESアルゴリズムの募集以前に、IDEA著者らはこのアルゴリズムを独自に提案した.このアルゴリズムは強く,現在の計算水準で10の13次方年を必要とする.米国の外で提出され、発展し、法律の制限を避ける.この制限はメール暗号化に最も多く適用される.電子メール暗号化ソフトウェアPGPはIDEAの商業著作権を使用している.JAva 6は実装を提供していません.Bouncy Castleが実現
二、アルゴリズム関連の構成説明
アルゴリズム#アルゴリズム#
鍵の長さ
鍵の長さのデフォルト
動作モード
じゅうてんほうしき
コメント
IDEA
128
128
ECB
PKCS5Padding/PKCS7Padding/ISO10126Padding/ZeroBytePadding
Bouncy Castle実装
三、アルゴリズムの応用展示
package com.ca.test;
import java.security.Key;
import java.security.Security;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import org.apache.commons.codec.binary.Base64;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
/**
 * IDEA      ,java6          ,bouncycastle  IDEA      
 *           。                  
 *                        :Rijndael,Serpent,Twofish 
 * @author kongqz
 * */
public class IDEACoder {
    /**
     *     
     * */
    public static final String KEY_ALGORITHM="IDEA";
    
    /**
     *   /    /    /    
     * */
    public static final String CIPHER_ALGORITHM="IDEA/ECB/ISO10126Padding";
    
    /**
     * 
     *     ,  bouncycastle  
     * @return byte[]      
     * */
    public static byte[] initkey() throws Exception{
        //  bouncyCastle  
        Security.addProvider(new BouncyCastleProvider());
        
        //        
        KeyGenerator kg=KeyGenerator.getInstance(KEY_ALGORITHM);
        //        ,IDEA       128 
        kg.init(128);
        //    
        SecretKey secretKey=kg.generateKey();
        //           
        return secretKey.getEncoded();
    }
    /**
     *     
     * @param key      
     * @return Key   
     * */
    public static Key toKey(byte[] key) throws Exception{
        //   DES  
        //    
        SecretKey secretKey=new SecretKeySpec(key,KEY_ALGORITHM);
        return secretKey;
    }
    
    /**
     *     
     * @param data      
     * @param key   
     * @return byte[]       
     * */
    public static byte[] encrypt(byte[] data,byte[] key) throws Exception{
        //  bouncyCastle  
        Security.addProvider(new BouncyCastleProvider());
        //    
        Key k=toKey(key);
        //   
        Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM);
        //   ,       
        cipher.init(Cipher.ENCRYPT_MODE, k);
        //    
        return cipher.doFinal(data);
    }
    /**
     *     
     * @param data      
     * @param key   
     * @return byte[]       
     * */
    public static byte[] decrypt(byte[] data,byte[] key) throws Exception{
        //  bouncyCastle  
        Security.addProvider(new BouncyCastleProvider());
        //    
        Key k =toKey(key);
        Cipher cipher=Cipher.getInstance(CIPHER_ALGORITHM);
        //   ,       
        cipher.init(Cipher.DECRYPT_MODE, k);
        //    
        return cipher.doFinal(data);
    }
    /**
     * @param args
     * @throws Exception 
     */
    public static void main(String[] args) throws Exception {
        String str="IDEA";
        System.out.println("  :"+str);
        //     
        byte[] key=IDEACoder.initkey();
        System.out.println("  :"+Base64.encodeBase64String(key));
        //    
        byte[] data=IDEACoder.encrypt(str.getBytes(), key);
        System.out.println("   :"+Base64.encodeBase64String(data));
        //    
        data=IDEACoder.decrypt(data, key);
        System.out.println("   :"+new String(data));
    }
}
       :
  :IDEA
  :TIM+ksMQUeUe6LHHBGntag==
   :rRHc34j86i4=
   :IDEA


四、まとめ1、このコードを参考にBouncycastleを使用してAESの候補アルゴリズムRijndael,Serpent,Twofish 2を実現することができます.このアルゴリズムはBouncyCastleのjarパッケージを使用する場合、必ず注意してください.その基礎のjar:bcprov-jdk 16-14.6だけです.jarは十分ではありません.その拡張jarパッケージ(bcprov-ext-jdk 16-14.6.jar)もプロジェクトのbuild pathに導入する必要があります.このextパッケージを参照しないでmain関数を実行するときは、java.security.NoSuchAlgorithmException:IDEA KeyGenerator not availableに注意してください.