Create a gist now

Instantly share code, notes, and snippets.

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( decipher.final('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
@jibbo

Very useful, thank you!

@raimckenzie

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

@Blink1982

Getting a ... on the java side

Exception in thread "main" java.security.InvalidKeyException: 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(ThirdCipher.java:31)

@jabbaugh

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");
to
SecretKeySpec skc = new SecretKeySpec(thedigest, "AES");

@girish3

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

@ligerzero459

Super helpful. Thanks a ton for posting this

@shashank008

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

@ricky07

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

@plainOldCode

@ricky07 try this

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

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

@mancdevcarl

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

@nascimentodiego

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

@siddo420

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

I am trying to encrypt secure token. See https://developers.google.com/recaptcha/docs/secure_token?hl=en

@simplexxx

work like a charm 👍

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