Instantly share code, notes, and snippets.

What would you like to do?
Encrypt from Java and decrypt on Node.js
// Encrypt where jo is input, and query is output and ENCRPYTION_KEy is key
byte[] input = jo.toString().getBytes("utf-8");
MessageDigest md = MessageDigest.getInstance("MD5");
byte[] thedigest = md.digest(ENCRYPTION_KEY.getBytes("UTF-8"));
SecretKeySpec skc = new SecretKeySpec(thedigest, "AES/ECB/PKCS5Padding");
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
cipher.init(Cipher.ENCRYPT_MODE, skc);
byte[] cipherText = new byte[cipher.getOutputSize(input.length)];
int ctLength = cipher.update(input, 0, input.length, cipherText, 0);
ctLength += cipher.doFinal(cipherText, ctLength);
String query = Base64.encodeToString(cipherText, Base64.DEFAULT);
var decipher = crypto.createDecipher('aes-128-ecb', encryption_key);
chunks = []
chunks.push( decipher.update( new Buffer(fullBuffer, "base64").toString("binary")) );
chunks.push('binary') );
var txt = chunks.join("");
txt = new Buffer(txt, "binary").toString("utf-8");
// where encryption_key = key, fullBuffer is the input and txt is output

This comment has been minimized.

jibbo commented Apr 16, 2013

Very useful, thank you!


This comment has been minimized.

raimckenzie commented Mar 28, 2014

After some minor tweaking this worked perfectly for me!
Thank you very much!


This comment has been minimized.

Blink1982 commented Jun 26, 2014

Getting a ... on the java side

Exception in thread "main" Wrong algorithm: AES or Rijndael required
at com.sun.crypto.provider.SunJCE_c.a(DashoA13_..)
at com.sun.crypto.provider.SunJCE_g.a(DashoA13_..)
at com.sun.crypto.provider.SunJCE_f.a(DashoA13_..)
at com.sun.crypto.provider.SunJCE_f.a(DashoA13_..)
at com.sun.crypto.provider.AESCipher.engineInit(DashoA13_..)
at javax.crypto.Cipher.a(DashoA13_..)
at javax.crypto.Cipher.a(DashoA13_..)
at javax.crypto.Cipher.init(DashoA13_..)
at javax.crypto.Cipher.init(DashoA13*..)
at ci.ThirdCipher.main(


This comment has been minimized.

jabbaugh commented Aug 15, 2014

Thanks for posting. You just saved me a lot of time. The only change I made was:
SecretKeySpec skc = new SecretKeySpec(thedigest, "AES/ECB/PKCS5Padding");
SecretKeySpec skc = new SecretKeySpec(thedigest, "AES");


This comment has been minimized.

girish3 commented Sep 18, 2014

I used it in my Android code....Thanks dude


This comment has been minimized.

ligerzero459 commented Aug 15, 2015

Super helpful. Thanks a ton for posting this


This comment has been minimized.

shashank-komuroju commented Sep 26, 2015

I used "sha-1" for message digest. how should the node equivalent code be changed.


This comment has been minimized.

ricky07 commented Oct 21, 2015

Can you please help me to write same encryption for Java script.


This comment has been minimized.

plainOldCode commented Dec 3, 2015

@ricky07 try this

var encrypt = function(data, key) {
var cipher = crypto.createCipher('aes-128-ecb', key);
return cipher.update(data, 'utf8', 'base64') +'base64');

var decrypt = function(data, key) {
var decipher = crypto.createDecipher('aes-128-ecb', key);
return decipher.update(data, 'base64', 'utf8') +'utf8');


This comment has been minimized.

mancdevcarl commented Dec 5, 2015

can someone please show me the code to DECRYPT on android (using the same spec as encrypting outlined above)


This comment has been minimized.

nascimentodiego commented Jan 21, 2016

Hi man, great code.
What is license to use ?


This comment has been minimized.

siddo420 commented Feb 2, 2016

can you also write an example on how to encrypt using Javascript (Node.js)?

I am trying to encrypt secure token. See


This comment has been minimized.

xexi commented Aug 8, 2016

work like a charm 👍


This comment has been minimized.

tuananh commented Apr 12, 2017


Can anyone help me how to convert this java snippet to nodejs equivalent?

byte[] key = nonce.getBytes("UTF-8");
MessageDigest messageDigest = MessageDigest.getInstance("SHA-1");
key = messageDigest.digest(key);
key = Arrays.copyOf(key, 16);
SecretKeySpec secretKeySpec = new SecretKeySpec(key, "AES");
Cipher ecipherSymmetric = Cipher.getInstance("AES");
ecipherSymmetric.init(Cipher.ENCRYPT_MODE, secretKeySpec);

This comment has been minimized.

LuizGC commented May 17, 2017

Very nice, @kennydude. This tip helps me a lot.l


This comment has been minimized.

aliciafraguasrubio commented Jul 17, 2017

Thank you!


This comment has been minimized.

neeraj87 commented Sep 7, 2017

That was amazing. Thanks a ton.


This comment has been minimized.

goldyraj commented Nov 24, 2017

public static String encrypt(byte[] plaintext) throws Exception, NoSuchAlgorithmException, NoSuchPaddingException, InvalidKeyException, IllegalBlockSizeException, BadPaddingException {

    PublicKey key = readPublicKey(publicKeyUrl1);
    Cipher cipher = Cipher.getInstance("RSA/ECB/PKCS1Padding");
    System.out.println("file content: " + key);//44
    cipher.init(Cipher.ENCRYPT_MODE, key);
    byte[] encryptedByte = cipher.doFinal(plaintext);
    String encodedString = new String(java.util.Base64.getEncoder().encode(encryptedByte));
    return encodedString;
}                please convert node js code 

This comment has been minimized.

monossido commented Apr 20, 2018

I've this error

Error: error:0606506D:digital envelope routines:EVP_DecryptFinal_ex:wrong final block length

This comment has been minimized.

zaw-hlaing-bwar commented Nov 9, 2018

use this one instead

var decipher = crypto.createDecipher('aes-128-ecb', key);
return decipher.update(encrypted, 'base64', 'utf8') +'utf8');

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment