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実装
三、アルゴリズムの応用展示
四、まとめ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に注意してください.
二、アルゴリズム関連の構成説明
アルゴリズム#アルゴリズム#
鍵の長さ
鍵の長さのデフォルト
動作モード
じゅうてんほうしき
コメント
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に注意してください.