使用CryptoJS、Java与Hutool实现AES/CBC/PKCS7Padding加解密数据
2024.01.17 11:40浏览量:66简介:介绍了使用CryptoJS、Java和Hutool库实现AES/CBC/PKCS7Padding加解密数据的方法。通过实例代码展示了如何进行加密和解密操作,并解释了其中的关键概念和步骤。
首先,需要明确一点:CryptoJS主要用于浏览器端JavaScript的加密,而Java则用于服务器端。我们可以通过Hutool这个Java工具包,使得Java代码更加简洁易读。
- 准备工作
首先,需要在项目中引入以下依赖:
- CryptoJS:JavaScript加密库
- BouncyCastle:Java加密库
- Hutool-Java:Java工具包
以下是Maven依赖示例:
CryptoJS (注意:CryptoJS已经停止更新,建议使用其它库如’webcrypto-js’或’sodium-js’)
BouncyCastle (注意:请使用适合你项目的版本)<dependency><groupId>com.googlecode.cryptojs</groupId><artifactId>crypto-js</artifactId><version>4.1.1</version></dependency>
Hutool-Java (注意:请使用适合你项目的版本)<dependency><groupId>org.bouncycastle</groupId><artifactId>bcprov-jdk15on</artifactId><version>1.68</version></dependency>
<dependency><groupId>cn.hutool</groupId><artifactId>hutool-all</artifactId><version>5.7.16</version></dependency>
- 加密过程
在JavaScript中,我们使用CryptoJS的AES方法进行加密:
在Java中,我们使用Hutool和BouncyCastle进行加密:var message = '待加密的数据'; // 替换为你要加密的数据var key = CryptoJS.enc.Utf8.parse('你的密钥'); // 替换为你的密钥var iv = CryptoJS.lib.WordArray.random(128 / 8); // 生成随机初始化向量var encrypted = CryptoJS.AES.encrypt(message, key, { iv: iv, padding: CryptoJS.pad.Pkcs7 }); // 加密数据
首先需要创建一个KeySpec对象(如PBKDF2KeySpec),然后使用它来创建一个SecretKey对象。接着,使用这个密钥和初始化向量创建一个Cipher对象,并执行加密操作。
```java
import cn.hutool.crypto.symmetric.SymmetricAlgorithm;
import cn.hutool.crypto.symmetric.SymmetricCrypto;
import cn.hutool.crypto.symmetric.KeySpec;
import java.security.spec.KeySpec;
import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import org.bouncycastle.jce.provider.BouncyCastleProvider;
import org.bouncycastle.util.encoders.Hex;
public class EncryptUtil {
static {
Security.addProvider(new BouncyCastleProvider());
}
public static String encrypt(String message, String key, String iv) throws Exception {
KeySpec keySpec = new PBKDF2KeySpec(key);
SecretKey secretKey = SecretKeyFactory.getInstance(“PBKDF2WithHmacSHA1”, “BC”).generateSecret(keySpec);
IvParameterSpec ivParameterSpec = new IvParameterSpec(Hex.decode(iv));
SymmetricCrypto symmetricCrypto = SymmetricCrypto.create(SymmetricAlgorithm.AES, secretKey, ivParameterSpec);
return symmetricCrypto.encrypt(message).toString();
}
}”你的密钥”和”你的初始化向量”需要替换为实际的密钥和初始化向量。

发表评论
登录后可评论,请前往 登录 或 注册