package com.koolearn.etraining.util.aes;
import java.security.InvalidAlgorithmParameterException;
import java.security.InvalidKeyException;
import java.security.NoSuchAlgorithmException;
import java.security.SecureRandom;
import java.security.spec.AlgorithmParameterSpec;
import javax.crypto.BadPaddingException;
import javax.crypto.Cipher;
import javax.crypto.IllegalBlockSizeException;
import javax.crypto.KeyGenerator;
import javax.crypto.NoSuchPaddingException;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
public class AESEncrypter {
public static byte[] iv = new byte[] { 82, 22, 50, 44, -16, 124, -40, -114,
-87, -40, 37, 23, -56, 23, -33, 75 };
private static AESEncrypter aes = null;
public static byte[] key1 = new byte[] { -42, 35, 67, -86, 19, 29, -11, 84,
94, 111, 75, -104, 71, 46, 86, -21, -119, 110, -11, -32, -28, 91,
-33, -46, 99, 49, 2, 66, -101, -11, -8, 56 };
private AESEncrypter() {
}
public static synchronized AESEncrypter getInstance() {
if (aes == null) {
aes = new AESEncrypter();
}
return aes;
}
public String encrypt(String msg) {
String str = "";
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(key1));
AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv);
SecretKey key = kgen.generateKey();
Cipher ecipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
ecipher.init(Cipher.ENCRYPT_MODE, key, paramSpec);
str = asHex(ecipher.doFinal(msg.getBytes()));
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
}
return str;
}
public String decrypt(String value) {
try {
KeyGenerator kgen = KeyGenerator.getInstance("AES");
kgen.init(128, new SecureRandom(key1));
AlgorithmParameterSpec paramSpec = new IvParameterSpec(iv);
SecretKey key = kgen.generateKey();
Cipher dcipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
dcipher.init(Cipher.DECRYPT_MODE, key, paramSpec);
return new String(dcipher.doFinal(asBin(value)));
} catch (BadPaddingException e) {
e.printStackTrace();
} catch (NoSuchAlgorithmException e) {
e.printStackTrace();
} catch (NoSuchPaddingException e) {
e.printStackTrace();
} catch (InvalidKeyException e) {
e.printStackTrace();
} catch (InvalidAlgorithmParameterException e) {
e.printStackTrace();
} catch (IllegalBlockSizeException e) {
e.printStackTrace();
}
return "";
}
public static void main(String args[]) {
String str = AESEncrypter.getInstance().encrypt("lenovo_45666");
System.out.println(str);
System.out.println(AESEncrypter.getInstance().decrypt(str));
}
private 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();
}
private byte[] asBin(String src) {
if (src.length() < 1)
return null;
byte[] encrypted = new byte[src.length() / 2];
for (int i = 0; i < src.length() / 2; i++) {
int high = Integer.parseInt(src.substring(i * 2, i * 2 + 1), 16);
int low = Integer.parseInt(src.substring(i * 2 + 1, i * 2 + 2), 16);
encrypted[i] = (byte) (high * 16 + low);
}
return encrypted;
}
}
分享到:
相关推荐
这个标准用来替代原先的DES,已经被多方分析且广为全世界所使用。...本软件是用java语言开发,实现了AES算法对文件的加密和解密,并在界面上加了进度条,来提示用户加密解密的进度。如果不足之处,欢迎留言。
2. **Java实现AES算法**:通过Java编程语言实现AES算法的具体方法与步骤。 3. **AES算法的原理**:包括密钥扩展、加解密过程等核心概念。 4. **Java中的加密技术**:介绍Java中支持加密的相关库和技术。 5. **AES...
2. **AESUtil.java**:此文件可能是AES加密工具类,它包含了与AES算法相关的实用方法。这个类可能包含了密钥生成、密钥转换、初始化向量(IV)的生成以及AES加密和解密的具体实现。`AESUtil`通常会使用`javax.crypto...
在Java中实现AES算法,可以用于数据的加密和解密,确保信息安全。本篇文章将详细解析`TestAES.java`文件中可能包含的AES算法源码,并深入探讨相关的Java编程与AES加密原理。 首先,AES算法基于Rijndael密码块结构,...
**AES算法详解** AES,全称为“Advanced Encryption Standard”,即高级加密标准,是目前广泛使用的对称加密算法。它在2001年由NIST(美国国家标准与技术研究所)正式采纳,取代了之前的DES(数据加密标准)成为新...
在Java中实现AES算法,你需要了解以下几个关键知识点: 1. **AES算法的基本原理**:AES是一种分组密码,它将明文分为128位的数据块进行处理。通过多个轮的替换、置换、线性变换等操作,使得原始数据变得难以破解。...
JAVA AES 加密算法 javax.crypto.Cipher AES/ECB/PKCS5Padding
在IT行业中,加密算法是数据安全的重要组成部分,Java平台提供了多种加密算法,如AES和DES。本文将深入探讨这两种加密算法在实际应用中可能遇到的问题和陷阱。 首先,AES(Advanced Encryption Standard)是一种块...
在Java中实现AES算法通常涉及到以下几个关键步骤和概念: 1. 密钥生成:AES支持三种不同的密钥长度,128位、192位和256位。在Java中,我们可以使用`javax.crypto.KeyGenerator`类来生成这些密钥。例如,生成128位的...
项目中使用AES算法进行数据加密解密,默认的写法与java 中的AES算法不一致,特写了一个与java一致的方法,已通过验证并使用。
在给定的代码示例中,AES算法被用于加密和解密字符串数据。 首先,了解AES加密的基本步骤: 1. **密钥生成**:AES加密需要一个密钥作为输入。在Java中,可以使用`KeyGenerator`类来生成密钥。`KeyGenerator....
在IT行业中,尤其是在Web开发中,AES算法常用于确保数据在传输过程中的安全性,例如在客户端(JavaScript)与服务器端(Java)之间的通信。本主题将深入探讨如何在Java和JavaScript环境中实现AES加解密,并实现互通...
通过阅读和学习这些源码,你可以深入理解AES算法在Java中的具体应用,并且能够自行编写符合需求的加密解密功能。 此外,了解AES的安全性和限制也是重要的。虽然AES本身非常安全,但如果密钥管理不当,如明文存储或...
以上就是AES算法在Java中的实现细节。在使用AES时,需要注意安全性问题,如密钥的管理和存储,以及防止密码重放攻击。同时,确保在不同平台间进行加密解密时使用相同的工作模式和填充方式,以保证兼容性。
AES算法的核心思想是使用替代-置换网络来加密数据,确保数据的安全性。AES算法的密钥长度可以是128位、192位或256位,密钥越长,安全性越高。 二、AES的特点 AES算法的主要特点是: 1、高级的:AES算法是当前使用...
// 使用AES算法,ECB模式,PKCS5填充 cipher.init(Cipher.ENCRYPT_MODE, secretKey); byte[] encryptedBytes = cipher.doFinal(plaintext.getBytes()); ``` 这里`plaintext`是待加密的明文字符串。 3. **解密过程*...
在Java中实现AES算法,主要涉及到`javax.crypto`和`java.security`这两个核心包。首先,我们需要创建一个密钥,这通常包括生成密钥对(公钥和私钥)或随机生成密钥。在AES中,我们只用到一个密钥,因为它是对称加密...
最近需要和银行pos做数据通讯,银行端算法为java实现的 AES/ECB/PKCS5PADDING我也改不了, c/c++这边实现ECB算法本来就少,PKCS5PADDING的更是没有,索性自己动手。工作原因c和java都得熟悉,因此把java端和c/c++...
在本文中,我们将深入探讨如何使用Java语言实现AES(Advanced Encryption Standard)加密算法,并结合图形用户...这个"JAVA实现AES算法+界面.zip"文件可能包含了实现这些功能的详细教程或代码示例,值得进一步研究。
Java实现AES加密算法Java实现AES加密算法