Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

AES Encryption/Decryption with Java and Typescript

i encrypt my string in JAVA like:

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;
        }
    }

and I want to decrypt it in 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 );
  }

the decryptedData.toString( CryptoJS.enc.Utf8 ) returns the following Error: Malformed UTF-8 data

I followed along this tutorial

like image 699
NeoGER89 Avatar asked Nov 19 '25 00:11

NeoGER89


1 Answers

here is a working example

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 );
  }
}
like image 97
NeoGER89 Avatar answered Nov 21 '25 14:11

NeoGER89



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!