import java.security.Key;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import javax.crypto.Cipher;
import javax.crypto.KeyGenerator;
import javax.crypto.SecretKey;
import javax.crypto.spec.SecretKeySpec;
public class CryptUtil {
private static final CryptUtil instance = new CryptUtil();
private CryptUtil() {
}
public static CryptUtil getInstance() {
return instance;
}
private Key initKeyForAES(String key) throws NoSuchAlgorithmException {
if (null == key || key.length() == 0) {
throw new NullPointerException("key not is null");
}
SecretKeySpec key2 = null;
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(key.getBytes()));
SecretKey secretKey = kgen.generateKey();
byte[] enCodeFormat = secretKey.getEncoded();
key2 = new SecretKeySpec(enCodeFormat, "AES");
} catch (NoSuchAlgorithmException ex) {
throw new NoSuchAlgorithmException();
}
return key2;
}
/**
* AES加密算法,不受密钥长度限制
* @param content
* @param key
* @return
*/
public String encryptAES(String content, String key){
try{
SecretKeySpec secretKey = (SecretKeySpec) initKeyForAES(key);
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
byte[] byteContent = content.getBytes("utf-8");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);// 初始化
byte[] result = cipher.doFinal(byteContent);
return asHex(result); // 加密
}
catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* aes解密算法,不受密钥长度限制
* @param content
* @param key
* @return
*/
public String decryptAES(String content, String key){
try{
SecretKeySpec secretKey = (SecretKeySpec) initKeyForAES(key);
Cipher cipher = Cipher.getInstance("AES");// 创建密码器
cipher.init(Cipher.DECRYPT_MODE, secretKey);// 初始化
byte[] result = cipher.doFinal(asBytes(content));
return new String(result); // 加密
}
catch (Exception e){
e.printStackTrace();
}
return null;
}
/**
* 将2进制数值转换为16进制字符串
* @param buf
* @return
*/
public String asHex(byte buf[]){
StringBuffer strbuf = new StringBuffer(buf.length * 2);
int i;
for (i = 0; i < buf.length; i++){
if (((int) buf[i] & 0xff) < 0x10)
strbuf.append("0");
strbuf.append(Long.toString((int) buf[i] & 0xff, 16));
}
return strbuf.toString();
}
/**
* 将16进制转换
* @param hexStr
* @return
*/
public byte[] asBytes(String hexStr) {
if (hexStr.length() < 1)
return null;
byte[] result = new byte[hexStr.length() / 2];
for (int i = 0; i < hexStr.length() / 2; i++){
int high = Integer.parseInt(hexStr.substring(i * 2, i * 2 + 1), 16);
int low = Integer.parseInt(hexStr.substring(i * 2 + 1, i * 2 + 2),16);
result[i] = (byte) (high * 16 + low);
}
return result;
}
public static void main(String[] args) {
CryptUtil crypt = CryptUtil.getInstance();
String content = "asdfsdfdsfds|33333443";
System.out.println(crypt.encryptAES(content, "aaa22"));
String dcontent = crypt.encryptAES(content, "aaa22");
System.out.println(crypt.decryptAES(dcontent, "aaa22"));
}
}
分享到:
相关推荐
Java加密解密工具是开发过程中不可或缺的部分,尤其是在处理敏感数据时,确保数据的安全性至关重要。在Java中,我们可以使用各种库和内置API来实现加密和解密操作。本篇文章将深入探讨Java加密解密的核心概念、常用...
java加密和解密的方法,利用指定的密钥,可逆的。密钥必须16位。
"com"目录下的子目录结构可能对应着Java的包名,包含了实现加密解密功能的类文件。而"resource"目录可能包含了配置文件、密钥文件或其他辅助资源,这些在加密解密过程中可能被用到。 总的来说,这个实例为我们展示...
Java Base64加密解密方法工具类
java SimpleCrypto 加密解密 加密解密 加密解密 加密解密
在Java编程环境中,处理文件的压缩与解压缩是常见的任务,而涉及到安全性,加密和解密就显得尤为重要。本文将详细讲解如何使用Java实现ZIP压缩包的加密与解密。 首先,我们需要理解加密的基本概念。加密是将明文...
Java加密解密工具包,通常用于保护敏感数据的安全,防止未经授权的访问或篡改。这个名为"JCT"的工具包提供了丰富的功能,使得开发者在Java应用中集成加密和解密操作变得更加简单。下面我们将详细探讨Java加密的相关...
标题和描述均提到了“Java加密解密简单实现”,这主要涵盖了消息摘要、单匙密码体制(DES)、数字签名(RSA)以及非对称密匙密码体制(公匙体系)等核心概念及其在Java中的应用。 ### 消息摘要 消息摘要是一种用于...
"java实现文件加密解密" Java 实现文件的加密与解密是指利用 Java 语言将资源文件(包括图片、动画等类型)进行简单的加密和解密。这种策略的原因和好处是将准备好的资源存储在云上,使用时通过网络进行读取即可,...
一段java语言加密和解密的代码
Java实现的RSA加密解密算法示例 本文主要介绍了Java实现的RSA加密解密算法,结合实例形式分析了Java RSA加密解密算法的相关实现技巧。 知识点1:RSA加密解密算法简介 RSA加密解密算法是一种非对称加密算法,由Ron...
Java加密解密技术在软件开发中扮演着至关重要的角色,特别是在数据安全领域。3DES(Triple Data Encryption Standard)是一种常见的加密算法,它基于DES(Data Encryption Standard)并对其进行了加强,提高了安全性...
### 加密解密概述 #### 加密的应用 加密技术是信息安全的核心技术之一,它的主要作用是保护数据不被未授权的用户所读取。具体来说,加密是使用一种算法对明文数据进行转换,使其变为密文,这一过程称为加密...
Java加密解密程序是软件开发中的一个重要领域,主要用于保护数据的安全性和隐私性。在这个特定的案例中,我们讨论的是一个基于MyEclipse开发的Java应用程序,它实现了凯撒加密法,这是一种古老但基础的加密技术。...
SMS4国密JAVA加密解密完整代码,无异常java类文件,导入即用。Convert.java 内部字符串进制转换类,SMS4.java 国密加密解密处理方法类。TestMain.java 测试类,调用 encrypt 加密 decode 解密
《JAVA加密和解密的艺术(第二版)》是一本深入探讨Java平台上的加密与解密技术的专业书籍。这本书不仅提供了理论知识,还包含了丰富的实践示例,帮助读者理解和掌握加密技术在实际应用中的运用。其内容涵盖了从基本...
在Java中实现排列码,我们可以利用编程语言的强大功能来设计相应的加密和解密算法。 首先,我们需要理解排列码的原理。排列码通常基于一个固定的编码规则,例如,可以使用数字或字符的某种特定顺序对数据进行编码。...
本文将深入探讨Java中的加密解密技术,基于提供的文件`PasswordUtil.java`和`DecryptAndEncryptUtil.java`,我们可以推测这两个文件包含了用于密码处理和数据加解密的实用工具类。 首先,Java提供了内置的`java....