对称加密算法 - IDEA

原创
2017/08/14 10:31
阅读数 86

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));
	}
}

 

 

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部