logo

使用CryptoJS、Java与Hutool实现AES/CBC/PKCS7Padding加解密数据

作者:沙与沫2024.01.17 11:40浏览量:66

简介:介绍了使用CryptoJS、Java和Hutool库实现AES/CBC/PKCS7Padding加解密数据的方法。通过实例代码展示了如何进行加密和解密操作,并解释了其中的关键概念和步骤。

首先,需要明确一点:CryptoJS主要用于浏览器端JavaScript的加密,而Java则用于服务器端。我们可以通过Hutool这个Java工具包,使得Java代码更加简洁易读。

  1. 准备工作
    首先,需要在项目中引入以下依赖:
  • CryptoJS:JavaScript加密库
  • BouncyCastle:Java加密库
  • Hutool-Java:Java工具包
    以下是Maven依赖示例:
    CryptoJS (注意:CryptoJS已经停止更新,建议使用其它库如’webcrypto-js’或’sodium-js’)
    1. <dependency>
    2. <groupId>com.googlecode.cryptojs</groupId>
    3. <artifactId>crypto-js</artifactId>
    4. <version>4.1.1</version>
    5. </dependency>
    BouncyCastle (注意:请使用适合你项目的版本)
    1. <dependency>
    2. <groupId>org.bouncycastle</groupId>
    3. <artifactId>bcprov-jdk15on</artifactId>
    4. <version>1.68</version>
    5. </dependency>
    Hutool-Java (注意:请使用适合你项目的版本)
    1. <dependency>
    2. <groupId>cn.hutool</groupId>
    3. <artifactId>hutool-all</artifactId>
    4. <version>5.7.16</version>
    5. </dependency>
  1. 加密过程
    在JavaScript中,我们使用CryptoJS的AES方法进行加密:
    1. var message = '待加密的数据'; // 替换为你要加密的数据
    2. var key = CryptoJS.enc.Utf8.parse('你的密钥'); // 替换为你的密钥
    3. var iv = CryptoJS.lib.WordArray.random(128 / 8); // 生成随机初始化向量
    4. var encrypted = CryptoJS.AES.encrypt(message, key, { iv: iv, padding: CryptoJS.pad.Pkcs7 }); // 加密数据
    在Java中,我们使用Hutool和BouncyCastle进行加密:
    首先需要创建一个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();
    }
    }”你的密钥”和”你的初始化向量”需要替换为实际的密钥和初始化向量。

相关文章推荐

发表评论

活动