Search code examples
javascriptnode.jscryptographynode-modulesnode-crypto

Error in crypto deciphering


Why does the following code throw up a DecipherFinal error in crypto -

  var crypto = require('crypto');
  c=new Date;
  x= (c.getTime()+"."+c.getMilliseconds()).toString()+".uIn";
  key = 'sevsolut'
        , plaintext = x
        , cipher = crypto.createCipher('aes-256-cbc', key)
        , decipher = crypto.createDecipher('aes-256-cbc', key);
  cipher.update(plaintext, 'utf8', 'base64');
  var encryptedPassword = cipher.final('base64')

  decipher.update(encryptedPassword, 'base64', 'utf8');
  var decryptedPassword = decipher.final('utf8');

  console.log('encrypted :', encryptedPassword);
  console.log('decrypted :', decryptedPassword);

Solution

  • You need to take the output from update:

    var crypto = require('crypto');
    c=new Date();
    x= (c.getTime()+"."+c.getMilliseconds()).toString()+".uIn";
    key = "sevsolut"
          , plaintext = x
          , cipher = crypto.createCipher('aes-256-cbc', key)
          , decipher = crypto.createDecipher('aes-256-cbc', key);
    var encryptedPassword = cipher.update(plaintext, 'utf8', 'base64');
    encryptedPassword += cipher.final('base64')
    
    var decryptedPassword = decipher.update(encryptedPassword, 'base64', 'utf8');
    decryptedPassword += decipher.final('utf8');
    
    console.log('encrypted :', encryptedPassword);
    console.log('decrypted :', decryptedPassword);