文档章节

对称加密算法 - IDEA

pan_1308
 pan_1308
发布于 2017/08/14 10:31
字数 446
阅读 23
收藏 0

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

 

 

© 著作权归作者所有

pan_1308
粉丝 5
博文 95
码字总数 58819
作品 0
黄冈
私信 提问
区块链100讲:盘点那些常用的加密算法原理

在开发过程中,常常用到各种加密方法和算法,本文总结了几种常用加密方法的原理。 1 对称加密 原理:加密和解密数据使用同一个密钥,适合对大量数据进行加解密 安全性:关键是密钥的保存方式...

HiBlock
2018/10/22
112
0
原来HTTPS SSH SSL是可以轻松被监听的

文章 The End of SSL and SSH? 实现方法 http://www.ibm.com/developerworks/cn/security/s-sniff/part1/index.html http://blog.chinaunix.net/uid-2469966-id-2595315.html 证实了我那个猜......

Foou
2013/12/20
3.5K
4
看完秒懂对称加密、非对称加密、数字签名

对称加密算法 对称加密(也叫私钥加密)指加密和解密使用相同密钥的加密算法。有时又叫传统密码算法,就是加密密钥能够从解密密钥中推算出来,同时解密密钥也可以从加密密钥中推算出来。而在大...

yushiwh
2018/07/11
0
0
安全性和保密性设计---安全协议

安全协议 Internet 是 IT 领域中发展的重大成就,它的迅速发展和全面普及给人们的生产、生活带来了很大的帮助。 但是,Internet 在当初是为了让更多的人来使用网络、共享资源,并且容易扩充、...

hu19930613
2018/12/20
0
0
eBay CEO作序推荐《web商务安全设计与开发宝典》:对称加密系统

eBay CEO作序推荐《web商务安全设计与开发宝典》:对称加密系统 使 用密码的目的是防止信息在传输和存储过程中被除目标接受者以外的任何人读取和理解。理想情况下,未经授权的个人永远都不能...

louise
2012/09/17
282
0

没有更多内容

加载失败,请刷新页面

加载更多

CSS盒子模型

一、什么叫框模型 页面元素皆为框(盒子) 定义了元素框处理元素内容,内边距,外边距以及边框的计算方式 二、外边距 围绕在元素边框外的空白距离(元素与元素之间的距离) 语法:margin,定...

wytao1995
16分钟前
2
0
Replugin借助“UI进程”来快速释放Dex

public static boolean preload(PluginInfo pi) { if (pi == null) { return false; } // 借助“UI进程”来快速释放Dex(见PluginFastInstallProviderProxy的说明) return PluginFastInsta......

Gemini-Lin
今天
4
0
Hibernate 5 的模块/包(modules/artifacts)

Hibernate 的功能被拆分成一系列的模块/包(modules/artifacts),其目的是为了对依赖进行独立(模块化)。 模块名称 说明 hibernate-core 这个是 Hibernate 的主要(main (core))模块。定义...

honeymoose
今天
4
0
精华帖

第一章 jQuery简介 jQuery是一个JavaScript库 jQuery具备简洁的语法和跨平台的兼容性 简化了JavaScript的操作。 在页面中引入jQuery jQuery是一个JavaScript脚本库,不需要特别的安装,只需要...

流川偑
今天
7
0
语音对话英语翻译在线翻译成中文哪个方法好用

想要进行将中文翻译成英文,或者将英文翻译成中文的操作,其实有一个非常简单的工具就能够帮助完成将语音进行翻译转换的软件。 在应用市场或者百度手机助手等各大应用渠道里面就能够找到一款...

401恶户
今天
3
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部