- 浏览: 2262700 次
- 性别:
- 来自: 北京
文章分类
- 全部博客 (423)
- FileNet相关 (3)
- 应用服务器相关 (22)
- Java综合 (77)
- 持久层 (24)
- struts (11)
- webservice (8)
- 虚拟机 (2)
- 光盘刻录 (0)
- AD及AD集群 (1)
- JS (33)
- F5 (0)
- loadrunner8.1 (0)
- Java 反编译工具 (2)
- DataBase (62)
- ant (1)
- 操作系统 (29)
- 我的任务 (3)
- 平台架构 (16)
- 业务规则引擎 (2)
- 模板 (1)
- EJB (5)
- spring (24)
- CMMI (1)
- 项目管理 (20)
- LDAP (13)
- JMS (10)
- JSP (19)
- JBPM (2)
- web MVC框架设计思想 (2)
- 第三方支付平台 (2)
- BUG管理工具 (1)
- 垃圾站 (2)
- php (1)
- swing (1)
- 书籍 (1)
- QQ qq (2)
- 移动互联网 (26)
- 爱听的歌曲 (0)
- hadoop (4)
- 数据库 (9)
- 设计模式 (1)
- 面试经验只谈 (1)
- 大数据 (9)
- sp (1)
- 缓存数据库 (8)
- storm (2)
- taobao (2)
- 分布式,高并发,大型互联网,负载均衡 (6)
- Apache Ignite (0)
- Docker & K8S (0)
最新评论
-
wangyudong:
新版本 Wisdom RESTClienthttps://gi ...
spring rest mvc使用RestTemplate调用 -
wangyudong:
很多API doc生成工具生成API文档需要引入第三方依赖,重 ...
spring rest mvc使用RestTemplate调用 -
zhaoshijie:
cfying 写道大侠,还是加载了两次,怎么解决啊?求。QQ: ...
spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) -
xinglianxlxl:
对我有用,非常感谢
spring容器加载完毕做一件事情(利用ContextRefreshedEvent事件) -
k_caesar:
多谢,学习了
利用maven的resources、filter和profile实现不同环境使用不同配置文件
关键字:对称加密(AES)加密实现工具类(教程)
Java加密解密相关名词(概念)解释(RSA、AES)
错误:java.security.InvalidKeyException: Illegal key size or default parameters解决方法
目前发现AES加密虽然可以大量加密文本速度也很快,但是内存消耗很大,如果需要大量文本加密的同学需要好好评估一下。之后还会贴出非对称加密(RSA)的加密、解密示例,以及.net 与Java间RSA加密的转换。
AES解密、加密工具类例子
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
public class AESSecurityUtil {
/** 密钥算法 */
private static final String KEY_ALGORITHM = "AES";
private static final int KEY_SIZE = 128;
/** 加密/解密算法/工作模式/填充方法 */
// public static final String CIPHER_ALGORITHM = "AES/ECB/NoPadding";
/**
* 获取密钥
* @return
* @throws Exception
*/
public static Key getKey() throws Exception{
//实例化
KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);
//AES 要求密钥长度为128位、192位或256位
kg.init(KEY_SIZE);
//生成密钥
SecretKey secretKey = kg.generateKey();
return secretKey;
}
/**
* 转化密钥
* @param key 密钥
* @return Key 密钥
* @throws Exception
*/
public static Key codeToKey(String key) throws Exception{
byte[] keyBytes = Base64.decodeBase64(key);
SecretKey secretKey = new SecretKeySpec(keyBytes,KEY_ALGORITHM);
return secretKey;
}
/**
* 解密
* @param data 待解密数据
* @param key 密钥
* @return byte[] 解密数据
* @throws Exception
*/
private static String decrypt(byte[] data,byte[] key) throws Exception{
//还原密钥
Key k = new SecretKeySpec(key,KEY_ALGORITHM);
/**
* 实例化
* 使用PKCS7Padding填充方式,按如下方式实现
* Cipher.getInstance(CIPHER_ALGORITHM,"BC");
*/
Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);
//初始化,设置解密模式
cipher.init(Cipher.DECRYPT_MODE,k);
//执行操作
return new String(cipher.doFinal(data),"UTF-8");
}
/**
* 解密
* @param data 待解密数据
* @param key 密钥
* @return byte[] 解密数据
* @throws Exception
*/
public static String decrypt(String data,String key) throws Exception{
return decrypt(Base64.decodeBase64(data), Base64.decodeBase64(key));
}
/**
* 加密
* @param data 待加密数据
* @param key 密钥
* @return bytes[] 加密数据
* @throws Exception
*/
public static byte[] encrypt(byte[] data,byte[] key) throws Exception{
//还原密钥
Key k = new SecretKeySpec(key,KEY_ALGORITHM);
/**
* 实例化
* 使用PKCS7Padding填充方式,按如下方式实现
* Cipher.getInstance(CIPHER_ALGORITHM,"BC");
*/
Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);
//初始化,设置为加密模式
cipher.init(Cipher.ENCRYPT_MODE,k);
//执行操作
return cipher.doFinal(data);
}
public static String encrypt(String data,String key) throws Exception{
byte[] dataBytes = data.getBytes("UTF-8");
byte[] keyBytes = Base64.decodeBase64(key);
return Base64.encodeBase64String(encrypt(dataBytes, keyBytes));
}
/**
* 初始化密钥
* @return
* @throws Exception
*/
public static String getKeyStr() throws Exception{
return Base64.encodeBase64String(getKey().getEncoded());
}
public static void main(String[] args) throws Exception{
String key = "VxDksHQiTvQt9MMPtMVXdA==";
String wenjian = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<mainData>\n" +
"<config>\n" +
" <operate>1</operate> <!--0:删除,1:新增,2:修改-->\n" +
"</config>\n" +
"<dataList type=\"personnel\">\n" +
" <data id=\"员工主数据主键\"> <!--默认主数据代码-->\n" +
" <code></code> <!--代码-->\n" +
" <name></name> <!--姓名-->\n" +
" <sex></sex> <!--性别-->\n" +
" <birthday></birthday> <!--出生日期-->\n" +
" <education></education> <!--文化程度-->\n" +
" <idNumber></idNumber> <!--身份证号码-->\n" +
" <entryDate></entryDate> <!--入职日期-->\n" +
" <departureDate></departureDate> <!--离职日期-->\n" +
" <address></address> <!--住址-->\n" +
" <phoneNumber></phoneNumber> <!--电话-->\n" +
" <mobilePhoneNumber></mobilePhoneNumber><!--移动电话-->\n" +
" <email></email> <!--电子邮件-->\n" +
" <position></position> <!--职务-->\n" +
" <maritalStatus></maritalStatus> <!--婚姻状况-->\n" +
" <partyAffiliation></partyAffiliation><!--政治面貌-->\n" +
" <username></username> <!--用户名-->\n" +
" <sortNo></sortNo> <!--排序号-->\n" +
" <status></status> <!--状态-->\n" +
" <department></department> <!--所属部门-->\n" +
" <company></company> <!--所属公司-->\n" +
" </data>\n" +
"</dataList>\n" +
"</mainData>";
StringBuffer buffer = new StringBuffer();
for(int index = 0;index < 20000;index ++){
buffer.append(wenjian);
}
String jimm = buffer.toString();
String mw = AESSecurityUtil.encrypt(jimm,key);
System.out.println("密文:" + mw);
String jm = AESSecurityUtil.decrypt(mw,key);
System.out.println("明文:" + jm);
}
}
Java加密解密相关名词(概念)解释(RSA、AES)
错误:java.security.InvalidKeyException: Illegal key size or default parameters解决方法
目前发现AES加密虽然可以大量加密文本速度也很快,但是内存消耗很大,如果需要大量文本加密的同学需要好好评估一下。之后还会贴出非对称加密(RSA)的加密、解密示例,以及.net 与Java间RSA加密的转换。
AES解密、加密工具类例子
import org.apache.commons.codec.binary.Base64;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
import java.security.Key;
public class AESSecurityUtil {
/** 密钥算法 */
private static final String KEY_ALGORITHM = "AES";
private static final int KEY_SIZE = 128;
/** 加密/解密算法/工作模式/填充方法 */
// public static final String CIPHER_ALGORITHM = "AES/ECB/NoPadding";
/**
* 获取密钥
* @return
* @throws Exception
*/
public static Key getKey() throws Exception{
//实例化
KeyGenerator kg = KeyGenerator.getInstance(KEY_ALGORITHM);
//AES 要求密钥长度为128位、192位或256位
kg.init(KEY_SIZE);
//生成密钥
SecretKey secretKey = kg.generateKey();
return secretKey;
}
/**
* 转化密钥
* @param key 密钥
* @return Key 密钥
* @throws Exception
*/
public static Key codeToKey(String key) throws Exception{
byte[] keyBytes = Base64.decodeBase64(key);
SecretKey secretKey = new SecretKeySpec(keyBytes,KEY_ALGORITHM);
return secretKey;
}
/**
* 解密
* @param data 待解密数据
* @param key 密钥
* @return byte[] 解密数据
* @throws Exception
*/
private static String decrypt(byte[] data,byte[] key) throws Exception{
//还原密钥
Key k = new SecretKeySpec(key,KEY_ALGORITHM);
/**
* 实例化
* 使用PKCS7Padding填充方式,按如下方式实现
* Cipher.getInstance(CIPHER_ALGORITHM,"BC");
*/
Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);
//初始化,设置解密模式
cipher.init(Cipher.DECRYPT_MODE,k);
//执行操作
return new String(cipher.doFinal(data),"UTF-8");
}
/**
* 解密
* @param data 待解密数据
* @param key 密钥
* @return byte[] 解密数据
* @throws Exception
*/
public static String decrypt(String data,String key) throws Exception{
return decrypt(Base64.decodeBase64(data), Base64.decodeBase64(key));
}
/**
* 加密
* @param data 待加密数据
* @param key 密钥
* @return bytes[] 加密数据
* @throws Exception
*/
public static byte[] encrypt(byte[] data,byte[] key) throws Exception{
//还原密钥
Key k = new SecretKeySpec(key,KEY_ALGORITHM);
/**
* 实例化
* 使用PKCS7Padding填充方式,按如下方式实现
* Cipher.getInstance(CIPHER_ALGORITHM,"BC");
*/
Cipher cipher = Cipher.getInstance(KEY_ALGORITHM);
//初始化,设置为加密模式
cipher.init(Cipher.ENCRYPT_MODE,k);
//执行操作
return cipher.doFinal(data);
}
public static String encrypt(String data,String key) throws Exception{
byte[] dataBytes = data.getBytes("UTF-8");
byte[] keyBytes = Base64.decodeBase64(key);
return Base64.encodeBase64String(encrypt(dataBytes, keyBytes));
}
/**
* 初始化密钥
* @return
* @throws Exception
*/
public static String getKeyStr() throws Exception{
return Base64.encodeBase64String(getKey().getEncoded());
}
public static void main(String[] args) throws Exception{
String key = "VxDksHQiTvQt9MMPtMVXdA==";
String wenjian = "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" +
"<mainData>\n" +
"<config>\n" +
" <operate>1</operate> <!--0:删除,1:新增,2:修改-->\n" +
"</config>\n" +
"<dataList type=\"personnel\">\n" +
" <data id=\"员工主数据主键\"> <!--默认主数据代码-->\n" +
" <code></code> <!--代码-->\n" +
" <name></name> <!--姓名-->\n" +
" <sex></sex> <!--性别-->\n" +
" <birthday></birthday> <!--出生日期-->\n" +
" <education></education> <!--文化程度-->\n" +
" <idNumber></idNumber> <!--身份证号码-->\n" +
" <entryDate></entryDate> <!--入职日期-->\n" +
" <departureDate></departureDate> <!--离职日期-->\n" +
" <address></address> <!--住址-->\n" +
" <phoneNumber></phoneNumber> <!--电话-->\n" +
" <mobilePhoneNumber></mobilePhoneNumber><!--移动电话-->\n" +
" <email></email> <!--电子邮件-->\n" +
" <position></position> <!--职务-->\n" +
" <maritalStatus></maritalStatus> <!--婚姻状况-->\n" +
" <partyAffiliation></partyAffiliation><!--政治面貌-->\n" +
" <username></username> <!--用户名-->\n" +
" <sortNo></sortNo> <!--排序号-->\n" +
" <status></status> <!--状态-->\n" +
" <department></department> <!--所属部门-->\n" +
" <company></company> <!--所属公司-->\n" +
" </data>\n" +
"</dataList>\n" +
"</mainData>";
StringBuffer buffer = new StringBuffer();
for(int index = 0;index < 20000;index ++){
buffer.append(wenjian);
}
String jimm = buffer.toString();
String mw = AESSecurityUtil.encrypt(jimm,key);
System.out.println("密文:" + mw);
String jm = AESSecurityUtil.decrypt(mw,key);
System.out.println("明文:" + jm);
}
}
发表评论
-
各大巨头电商提供的IP库API接口-新浪、搜狐、阿里...
2015-04-22 13:18 15913关键字:各大巨头电商提供的IP库API接口-新浪、搜狐、阿里. ... -
用Java来获取访问者真实的IP地址-超准确
2015-04-22 12:55 6259关键字:用Java来获取访问者真实的IP地址-超准确 下面分享 ... -
Shiro集成OAuth2
2015-04-21 10:31 12447关键字:Shiro集成OAuth2 参考:http://jin ... -
淘宝网架构分享总结 - 架构,分布式,淘宝,虚拟化,水平伸缩
2015-04-19 00:25 7638推荐综合架构交流群:JAVA开发高级群 点击入群!!! 关键 ... -
Zookeeper 和 SASL
2015-04-16 09:29 13640关键字:Zookeeper 和 SASL 介绍 这是一个描述Z ... -
非对称加密(RSA)加密解密实现通信JAVA端工具类(教程)
2015-04-15 17:27 1185关键字:非对称加密(RSA)加密解密实现通信JAVA端工具类( ... -
Curator-Framework开源Zookeeper快速开发框架介绍
2015-04-14 18:41 705关键字:Curator-Framework开源Zookeepe ... -
IM消息推送之Openfire
2015-04-13 13:40 2218关键字:IM消息推送之Openfire Openfire 采用 ... -
Nio框架之Mina的demo
2015-04-12 13:38 647关键字:Nio框架之Mina的demo 官网:http://m ... -
AMQP中文版协议规范
2015-01-23 17:12 2992关键字:AMQP中文版协议规范 AMQP中文版协议规范:ht ... -
数据库连接池选型
2014-12-04 18:32 1171关键字:数据库连接池选型 proxool(与spring不太 ... -
spring中的数据源配置信息加密方案
2014-10-22 10:36 1078关键字:spring中的数据源配置信息加密方案 附件是完整的 ... -
OAuth2.0的Java实现 Apache Amber
2014-10-09 23:20 800关键字:OAuth2.0的Java实现 Apache Ambe ... -
企业信息管理系统基础框架jeesite
2014-05-06 22:21 2594jeesite项目地址(使用说明,):http://jeesi ... -
java中文分词组件-word分词
2014-05-06 21:33 21990关键字:java中文分词组 ... -
java制作可执行文件EXE文件
2014-05-05 18:58 1610关键字:java制作可执行文件EXE文件 参考:http: ... -
Quartz任务调度器详解
2014-04-25 22:46 19007关键字: 参考文章:ht ... -
各种hash算法-hashcodeUtil
2014-04-24 15:36 4251关键字:各种hash算法-hashcodeUtil -
性能监控工具类(StopWatchUtil)
2014-03-21 15:12 5749关键字:性能监控工具类(StopWatchUtil) 附 ... -
性能监控工具类(StopWatchUtil)
2014-03-19 16:35 2关键字:性能监控工具类(StopWatchUtil) 附件是 ...
相关推荐
AES对称加密工具类,本工具类已经测试通过,不需要额外依赖,直接copy即可使用
在Qt5中,可以使用QCryptographicHash和QByteArray等类来实现AES加密。首先,需要创建一个密钥,然后使用QCryptographicHash将密钥扩展为所需的长度。接着,使用QCryptographicHash的hash方法生成初始向量(IV)。...
适用于java开发者使用,用于对称加密的数据。进行加密。
综合网上的AES加密,把其做成一个工具类,方便加密解密的实现
AES256加密工具类是信息安全领域中一个重要的实用组件,它主要负责对数据进行加密保护,确保数据在传输或存储过程中的安全。AES(Advanced Encryption Standard)是一种广泛使用的对称加密算法,提供了强大的安全性...
总之,AES加密解密工具类在Java中实现涉及对Cipher类的熟练使用,理解加密模式和填充策略,以及正确管理和生成密钥和初始化向量。这个工具类使得开发者能够方便地在项目中集成加密功能,保障数据的安全。
在这个“RSA+AES加密工具类 Java”中,我们将深入探讨这两种加密技术以及如何在Java环境中,包括Android和Web应用,实现它们。 首先,RSA(Rivest-Shamir-Adleman)是一种非对称加密算法,基于大整数因子分解的困难...
在这个"JAVAAES对称加密工具类"中,我们主要探讨的是如何在Java中实现AES加密,并通过`EncryptUtil.java`这个类来处理字符串和文件流的加密操作。 AES加密算法基于替换和置换的过程,分为四个主要步骤:SubBytes、...
本项目“C# AES加密解密小工具”提供了一个简单的AES ECB模式加密和解密实现,适用于对文本文件进行安全处理。 首先,AES是一种块密码,它将明文分成128位的块进行操作。ECB(Electronic Codebook)模式是最基础的...
在Java编程环境中,我们可以使用如`javax.crypto`包中的类来实现对称加密,例如AES(Advanced Encryption Standard)算法。AES是一种广泛应用的对称加密标准,提供了不同长度的密钥(128位、192位和256位),具有较...
在IT行业中,加密技术是确保数据安全的重要手段。本文将详细介绍RSA和AES两种加密算法以及它们在实际应用中...通过编写和使用加密工具类,我们可以便捷地将这些理论知识应用于实践,保护我们的系统免受潜在的安全威胁。
在压缩包子文件的文件名称列表中,虽然没有具体的文件名,但可以假设这些文件包含了实现AES加密的必要库或工具。可能包含的是Bouncy Castle等开源库,它们提供了更广泛的加密算法支持,包括各种AES模式(如ECB、CBC...
本篇文章将深入探讨如何使用C++开源库Cryptopp来封装Aes对称加密,并且特别关注如何在Android和Java平台上实现该功能。 Cryptopp是一个强大的、免费的C++类库,提供了多种加密、解密、哈希和伪随机数生成算法,包括...
在Qt中,我们可以利用QCryptographicHash、QByteArray和QBuffer等类来实现AES加密和解密。 1. **AES加密算法**: AES有三种不同的密钥长度,即128位(AES_128)、192位(AES_192)和256位(AES_256)。这些长度的选择直接...
使用Java的`javax.crypto`包可以方便地实现AES加密和解密。 非对称加密则使用两个不同的密钥,一个公开的公钥用于加密,一个私有的私钥用于解密。这种加密方式的安全性更高,因为即使公钥被截获,也无法据此推算出...
"AES与RSA加密工具类"涉及的是两种广泛使用的加密算法:高级加密标准(AES)和 Rivest-Shamir-Adleman(RSA)。这两者在保护敏感信息、确保数据隐私以及构建安全的通信通道中扮演着关键角色。 AES,全称为Advanced ...
### 使用OpenSSL中的AES加密算法实现文件的加密与解密 #### 一、概述 本文档将详细介绍如何使用OpenSSL库中的AES加密算法对文件进行加密和解密操作。主要聚焦于EVP_aes_128_ecb和EVP_aes_256_ecb两种模式,并提供...
在IT领域,加密技术是确保数据安全的重要手段之一,而AES(Advanced Encryption Standard)作为一项广泛应用的对称加密算法,其高效性和安全性被广大开发者所信赖。本项目以Qt为开发环境,提供了一个AES加密程序的...
在Kotlin中,可以使用Java Cryptography Extension (JCE)库来实现AES加密。AES的基本工作流程是将明文数据块通过密钥转化为密文,解密时则反之。AES支持不同长度的密钥,如128位、192位和256位,其中128位是最常见的...
总结,Java中的RSA非对称加密和AES对称加密是数据安全的重要工具,而过滤器则为统一处理数据提供了方便。通过学习和实践这些技术,开发者可以构建更安全、可靠的网络应用。在实际应用中,应根据项目需求选择合适的...