1、概述
IDEA(International Data Encryption Algorithm,国际数据加密标准), 在寻找DES算法替代品的同时、在AES算法征集以前,IDEA作者就独辟蹊径的提出了这个算法。这个算法很强,想破解出来按照当前的计算水准需要10的13次方年。目前,java6没提供实现,Bouncy Castle提供了实现;比较常用于 电子邮件的加解密。 java6没提供实现,Bouncy Castle提供了实现。
2、实现
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 安全密钥组件
*/
public class IDEACoder {
/**密钥算法*/
public static final String KEY_ALGORITHM = "IDEA";
/**加密/解密算法 / 工作模式 / 填充方式*/
public static final String CIPHER_ALGORITHM = "IDEA/ECB/ISO10126Padding";
/**
* 转换密钥
*/
private static Key toKey(byte[] key){
SecretKey secretKey = new SecretKeySpec(key, KEY_ALGORITHM);
return secretKey;
}
/***
* 生成密钥
*/
public static byte[] init() throws Exception{
/**
* 加入 BouncyCastleProvider 支持
*/
Security.addProvider(new BouncyCastleProvider());
// 实例化
KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);
// 初始化
kg.init(128);
// 生成私密密钥
SecretKey secretKey = kg.generateKey();
// 返回 密钥的 二进制编码形式
return secretKey.getEncoded();
}
/**
* 加密
* @param data
* @param key
* @return
* @throws Exception
*/
public static String encrypt(byte[] data, byte[] key) throws Exception{
// 加入 BouncyCastleProvider 支持
Security.addProvider(new BouncyCastleProvider());
// 还原密钥
Key k = toKey(key);
// 实例化
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
// 初始化 设置加密模式
cipher.init(Cipher.ENCRYPT_MODE, k);
// 操作
byte[] encry = cipher.doFinal(data);
return Base64.encodeBase64String(encry);
}
/**
* 解密
* @param data
* @param key
* @return
* @throws Exception
*/
public static String decrypt(String encry, byte[] key) throws Exception{
//还原加密原数据
byte[] data = Base64.decodeBase64(encry);
// 加入 BouncyCastleProvider 支持
Security.addProvider(new BouncyCastleProvider());
// 还原密钥
Key k = toKey(key);
// 实例化
Cipher cipher = Cipher.getInstance(CIPHER_ALGORITHM);
// 初始化 设置 解密 模式
cipher.init(Cipher.DECRYPT_MODE, k);
// 操作
byte[] decry = cipher.doFinal(data);
return new String(decry);
}
public static void main(String[] args) throws Exception {
byte[] key = init();
String source = "IDEA 测试";
String encry = encrypt(source.getBytes("utf-8"), key);
System.out.println(source + "-> IDEA 加密后:" + new String(encry));
String decry = decrypt(encry, key);
System.out.println(source + "-> IDEA 解密后:" + new String(decry));
}
}