对称加密算法 - IDEA

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

 

 

转载于:https://my.oschina.net/u/1387400/blog/1509559

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值