Search code examples
javascriptjavanode.jscryptographycryptojs

AES Encryption/Decryption in Node JS similar to Java


I am trying to replicate the Java code for AES Encryption and Decryption in Node JS.

Java Code

    SecretKeySpec skeySpec;
    String key = "a4e1112f45e84f785358bb86ba750f48";

    public void encryptString(String key) throws Exception {
        try {
            skeySpec = new SecretKeySpec(key.getBytes(), "AES");
            cipher = Cipher.getInstance("AES");
            cipher.init(1, skeySpec);
            byte encstr[] = cipher.doFinal(message.getBytes());
            String encData = new String(encstr, "UTF-8");
            System.out.println(encData);
        } catch (NoSuchAlgorithmException nsae) {
            throw new Exception("Invalid Java Version");
        } catch (NoSuchPaddingException nse) {
            throw new Exception("Invalid Key");
        }
    }

Node JS

    var encryptKey = function (text) {
        var cipher = crypto.createCipher('aes256', 'a4e1112f45e84f785358bb86ba750f48');
        var crypted = cipher.update(text,'utf8', 'hex')
        crypted += cipher.final('hex');
        console.log(crypted);
        return crypted;
    }

I am unable to get the exact cipher-text in Node JS, which i am getting in Java.


Solution

  • Finally after reviewing Java Docs and Node JS Crypto Docs managed to get the result. We have to use crypto.createCipheriv() instead of crypto.createCipher with a iv. Here iv will be null.

    Code :

        let crypto = require('crypto');
    
        var iv = new Buffer.from('');   //(null) iv 
        var algorithm = 'aes-256-ecb';
        var password = 'a4e1112f45e84f785358bb86ba750f48';      //key password for cryptography
    
        function encrypt(buffer){
            var cipher = crypto.createCipheriv(algorithm,new Buffer(password),iv)
            var crypted = Buffer.concat([cipher.update(buffer),cipher.final()]);
            return crypted;
        }
    
        console.log(encrypt(new Buffer('TextToEncrypt')).toString())