前后端数据加密与解密

前端js加密,后端java数据解密

使用CryptoJS进行加密

CryptoJS是一个JavaScript库,支持多种加密算法,包括AES。下面是使用CryptoJS进行加密的一个例子。

首先,你需要引入CryptoJS库。可以通过CDN或者安装到项目中来使用:

html 复制代码
<script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.1.1/crypto-js.min.js"></script>
JavaScript AES加密函数(非异步版本):
javascript 复制代码
function encryptData(data, key) {
    // 使用CryptoJS库进行AES加密
    var encrypted = CryptoJS.AES.encrypt(data, key); // 这里的key应该是转换成字节数组后的密钥
    return encrypted.toString();
}

// 使用示例
var key = "your-encryption-key"; // 密钥,需要保证长度合适
var data = "Hello, World!";
var encryptedData = encryptData(data, key);
console.log("Encrypted Data:", encryptedData);

后端 Java 解密示例

使用同样的密钥,在Java后端解密这个字符串:

java 复制代码
import javax.crypto.Cipher;
import javax.crypto.SecretKey;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class AESDecryption {

    private static final String ALGORITHM = "AES/CBC/PKCS5Padding";

    public static String decrypt(String encryptedData, SecretKey secretKey, byte[] iv) throws Exception {
        Cipher cipher = Cipher.getInstance(ALGORITHM);
        cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(iv));
        
        // 处理CryptoJS的格式
        String base64Content = encryptedData.split("\\.")[1];
        byte[] base64ContentBytes = Base64.getDecoder().decode(base64Content);
        
        byte[] decryptedBytes = cipher.doFinal(base64ContentBytes);
        return new String(decryptedBytes);
    }
    
    public static void main(String[] args) throws Exception {
        String encryptedData = "U2FsdGVkX1+eG..."; // 从前端获取的加密数据
        String key = "your-encryption-key";
        byte[] iv = "InitializationVe...".getBytes(); // 用于CBC模式的初始化向量
        
        SecretKey secretKey = new SecretKeySpec(key.getBytes(), "AES");
        String decryptedData = decrypt(encryptedData, secretKey, iv);
        System.out.println("Decrypted Data: " + decryptedData);
    }
}

注意事项

  1. 密钥长度:确保你的密钥长度符合AES的要求(128位、192位或256位)。CryptoJS默认情况下接受任意长度的字符串,但它实际上会在内部将该字符串转换为固定长度的密钥。
  2. IV 长度:对于CBC模式,IV长度应该与块大小相匹配,通常是16字节(128位)。
  3. 加密格式:CryptoJS返回的加密结果是一个包含头信息的字符串,因此在Java解密时需要提取正确的部分进行解密。
  4. 安全性:在实际应用中,请确保使用足够强度的密钥,并且密钥不应直接硬编码在代码中。

使用这种方式,你可以实现前后端之间的简单加密解密功能。不过,对于生产环境的应用程序,强烈建议采取更严格的安全措施。

相关推荐
页面魔术3 分钟前
无虚拟dom怎么又流行起来了?
前端·javascript·vue.js
汪子熙18 分钟前
浏览器里出现 .angular/cache/19.2.6/abap_test/vite/deps 路径究竟说明了什么
前端·javascript·面试
UserNamezhangxi24 分钟前
kotlin 协程笔记
java·笔记·kotlin·协程
林太白24 分钟前
Nuxt3 功能篇
前端·javascript·后端
YuJie25 分钟前
webSocket Manager
前端·javascript
咖啡里的茶i33 分钟前
数字化图书管理系统设计实践(java)
java·课程设计
wycode1 小时前
Promise(一)极简版demo
前端·javascript
浮幻云月1 小时前
一个自开自用的Ai提效VsCode插件
前端·javascript
九转苍翎1 小时前
Java内功修炼(2)——线程安全三剑客:synchronized、volatile与wait/notify
java·thread
曲莫终1 小时前
正则表达式删除注释和多余换航
java·kotlin