对称加密算法-IDEA算法

一、简述

  在寻找DES算法替代品的同时、在AES算法征集以前,IDEA作者就独辟蹊径的提出了这个算法。这个算法很强,想破解出来按照当前的计算水准需要10的13次方年。

  在美国之外提出并发展,避开法律限制。这个限制被最多应用在邮件加密。电子邮件加密软件PGP使用的就是IDEA的商业版权。

  java6没提供实现。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-jdk16-146.jar是不够滴,需要将那个扩展jar包(bcprov-ext-jdk16-146.jar)也引入项目的build path中.如果你不引用这个ext包,执行main函数的时候就提醒你:java.security.NoSuchAlgorithmException: IDEA KeyGenerator not available

时间: 2024-10-21 03:29:51

对称加密算法-IDEA算法的相关文章

对称加密算法-AES算法(高级数据加密标准)

一.简述   DES的不安全性以及DESede算法的低效,催生了这个AES算法(advanced Encryption Standard).这个算法比DES要快,安全性高.密钥建立时间段.灵敏性好.内存需求低.在各个领域应用广泛.目前,AES通常用于移动通信系统以及一些软件的安全外壳.还有一些无线路由器中也是用AES算法构建加密协议 二.AES算法的概要说明   算法 密钥长度 密钥长度默认值 工作模式 填充方式 备注 AES 128/192/256 128 ECB/CBC/PCBC/CTR/C

对称加密算法-PBE算法

一.简述   PBE算法(Password Base Encryption,基于口令加密)算法是一种基于口令的加密算法.特点在于口令由用户自己掌握,采用随机数(我们这里叫做 盐)杂凑多重加密等方法保证数据的安全性.   PBE算法没有密钥的概念,把口令当做密钥了.因为密钥长短影响算法安全性,还不方便记忆,这里我们直接换成我们自己常用的口令就大大不同了,便于我们的记忆.但是单纯的口令很容易被字典法给穷举出来,所以我们这里给口令加了点"盐",这个盐和口令组合,想破解就难了. 同时我们将盐和

对称加密算法-DES以及DESede算法

一.简述   对称加密算法就是能将数据加解密.加密的时候用密钥对数据进行加密,解密的时候使用同样的密钥对数据进行解密.   DES是美国国家标准研究所提出的算法.因为加解密的数据安全性和密钥长度成正比.des的56位的密钥已经形成安全隐患,在1998年之后就很少被采用.但是一些老旧的系统还在使用.因为这个des算法并没有被美国标准委员会公布全部算法,大家一致怀疑被留了后门.所以慢慢就被淘汰掉了.   后来针对des算法进行了改进,有了三重des算法(DESede).针对des算法的密钥长度较短以

利用DotNET密码系统之一的DES对称加密算法保证数据安全

安全|加密|数据|算法 (亿众国际-008)[原创]利用DotNET密码系统保证数据安全 ///////////////////////////////////////////////////////////////Author: stardicky ////E-mail: stardicky@hotmail.com ////QQNumber: 9531511 ////CompanyName: Ezone International ////Class: HBS-0308 ////title:

用C#实现的数据加密(一) —— 对称加密算法

加密|数据|算法 用C#实现的数据加密(一) -- 对称加密算法 以下是关于对称加密算法的C#实现代码,大家可以根据需要更改不同的算法,文中以Rijndael算法为例: using System;using System.IO;using System.Security.Cryptography;using System.Text; namespace DataCrypto{ /// <summary> /// 对称加密算法类 /// </summary> public class

对称加密(2) 对称加密算法

经典的对称加密算法是DES算法,后来又衍生出3DES.TripleDES等增强型的DES算法.此外,.NET还提供了RC2.Rijndael等对称加密算法.下面分别详细介绍. DES加密算法 对称加密算法中最经典的算法莫过于DES加密算法.DES加密采用的是分组加密的方法,使用56位密钥加密64位明文,最后产生64位密文.DES算法的基本流程如图6-2所示. 图6-2  DES加密算法基本流程 现在对图6-2的整个流程做简要的分析.DES对64位的明文分组M进行操作,M经过一个初始置换IP置换成

非对称加密算法-DH算法

一.概述   1.与对称加密算法的主要差别在于,加密和解密的密钥不相同,一个公开(公钥),一个保密(私钥).主要解决了对称加密算法密钥分配管理的问题,提高了算法安全性.   2.非对称加密算法的加密.解密的效率比较低.在算法设计上,非对称加密算法对待加密的数据长度有着苛刻的要求.例如RSA算法要求待加密的数据不得大于53个字节.   3.非对称加密算法主要用于 交换对称加密算法的密钥,而非数据交换   4.java6提供实现了DH和RSA两种算法.Bouncy Castle提供了E1Gamal算

非对称加密算法-ElGamal算法

一.概述   1.ElGamal算法和ECC算法基于离散对数问题   2.这个是一个单向的过程.虽然密钥对构造简单,但是只是乙方向另外一方单向传送数据进行加解密,不能反向操作   3.这里只有"公钥加密.私钥解密"这个过程   4.ElGamal不足之处就是 密文会成倍增长   5.ElGamal和RSA最大不同就是他们构造密钥对的方式不同.还有就是是否为双向加解密   二.模型分析  以甲方向乙方发送数据为模型 1.甲方构造密钥对(公钥+私钥),公布公钥给乙方 2.这里甲方没法给乙方

【&amp;amp;#9733;】RSA-什么是不对称加密算法?

不对称加密算法RSA浅析        本文主要介绍不对称加密算法中最精炼的RSA算法.我们先说结论,也就是RSA算法怎么算,然后再讲为什么.        随便选取两个不同的大素数p和q,N=p*q,r=(p-1)*(q-1).        算出一组(e,d)满足e*d≡1(mod r).        设明文x,密文y,x和y都小于N:        加密:xe ≡ y (mod N):解密:yd ≡ x (mod N).        以前也接触过RSA加密算法,感觉这个东西太神秘了,是