AES加解密,java、javascript

后台代码

import javax.crypto.Cipher;
import javax.crypto.spec.IvParameterSpec;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;

public class AESEncryption {
  public static String encrypt(String key, String initVector, String value) {
    try {
      IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
      SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");

      Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
      cipher.init(Cipher.ENCRYPT_MODE, skeySpec, iv);

      byte[] encrypted = cipher.doFinal(value.getBytes());
      return Base64.getEncoder().encodeToString(encrypted);
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    return null;
  }

  public static String decrypt(String key, String initVector, String encrypted) {
    try {
      IvParameterSpec iv = new IvParameterSpec(initVector.getBytes("UTF-8"));
      SecretKeySpec skeySpec = new SecretKeySpec(key.getBytes("UTF-8"), "AES");

      Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
      cipher.init(Cipher.DECRYPT_MODE, skeySpec, iv);

      byte[] original = cipher.doFinal(Base64.getDecoder().decode(encrypted));
      return new String(original);
    } catch (Exception ex) {
      ex.printStackTrace();
    }
    return null;
  }

  public static void main(String[] args) {
    String key = "0123456789abcdef"; // 16字节的AES密钥
    String initVector = "abcdefghijklmnop"; // 16字节的初始化向量

    String originalString = "你好, AES!";

    String encryptedString = encrypt(key, initVector, originalString);
    System.out.println("Encrypted: " + encryptedString);

    String decryptedString = decrypt(key, initVector, encryptedString);
    System.out.println("Decrypted: " + decryptedString);
  }
}

前端代码

<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title>AES Encryption Demo</title>
  <script src="https://cdnjs.cloudflare.com/ajax/libs/crypto-js/4.0.0/crypto-js.min.js"></script>
</head>
<body>
<script>
  function encryptAES(text, key, initVector) {
    try {
      var cipher = CryptoJS.AES.encrypt(text, key, { iv: initVector });
      return cipher.toString();
    } catch (error) {
      console.error("Encryption error:", error);
      return null;
    }
  }

  function decryptAES(encryptedText, key, initVector) {
    try {
      var decrypted = CryptoJS.AES.decrypt(encryptedText, key, { iv: initVector });
      return decrypted.toString(CryptoJS.enc.Utf8);
    } catch (error) {
      console.error("Decryption error:", error);
      return null;
    }
  }

  // ***示例用法,在实际应用中,应该采取措施来保护密钥,不能直接暴露***
  var key = "0123456789abcdef"; // 16字节的AES密钥
  var initVector = "abcdefghijklmnop"; // 16字节的初始化向量
  var encryptString = "Hello, AES !";

  var encryptedString = encryptAES(encryptString, key, initVector);
  console.log("Encrypted: ", encryptedString);

  var decryptedString = decryptAES(encryptedString, key, initVector);
  console.log("Decrypted: ", decryptedString);

</script>
</body>
</html>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

霜!!

不错,👆赏!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值