繁体   English   中英

使用 Java 和 Typescript 进行 AES 加密/解密

[英]AES Encryption/Decryption with Java and Typescript

我在 JAVA 中加密我的字符串,例如:

public String encrypt(String toEncrypt) {
        try {
            Cipher c = Cipher.getInstance("AES");
            c.init(Cipher.ENCRYPT_MODE, aesKey);
            byte[] encVal = c.doFinal(toEncrypt.getBytes());
            return Base64.getEncoder().encodeToString(encVal);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

我想在 typescript 中解密它:

public static decrypt(key, value){
    key = btoa(key);
    let decryptedData = CryptoJS.AES.decrypt(value, key, {
      mode: CryptoJS.mode.ECB,
      padding: CryptoJS.pad.Pkcs7
    });
    return decryptedData.toString( CryptoJS.enc.Utf8 );
  }

decryptedData.toString( CryptoJS.enc.Utf8 )返回以下错误:格式错误的 UTF-8 数据

我跟着这个教程

这是一个工作示例

JAVA:

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

public class Crypter {

    private final String key = "1234567890123456";
    
    public String encrypt(String toEncrypt) {
        try {
            IvParameterSpec iv = new IvParameterSpec(key.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(toEncrypt.getBytes());
            return new String(Base64.getEncoder().encode(encrypted));
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }

    public String decrypt(String toDecrypt) {
        try {
            IvParameterSpec iv = new IvParameterSpec(key.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[] cipherText = cipher.doFinal(Base64.getDecoder().decode(toDecrypt));
            return new String(cipherText);
        } catch (Exception e) {
            e.printStackTrace();
            return null;
        }
    }
}

TypeScript:

import * as CryptoJS from 'crypto-js';

export class Crypter{

  public static encrypt(key, value){
    key = CryptoJS.enc.Utf8.parse(key);
    let ciphertext = CryptoJS.AES.encrypt(value, key, {iv: key}).toString();
    return ciphertext;
  }

  public static decrypt(key, value){
    key = CryptoJS.enc.Utf8.parse(key);
    let decryptedData = CryptoJS.AES.decrypt(value, key, {
      iv: key
    });
    return decryptedData.toString( CryptoJS.enc.Utf8 );
  }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM