Search code examples
node.jscryptojs

Trying to add data in unsupported state at Cipher.update


Below code is working

var crypto = require('crypto');
var cipher = crypto.createCipher('aes-128-cbc','abcdefghijklmnop')
var http = require('http')

var userStr = 'a134aad';
var crypted = cipher.update(userStr, 'utf8', 'hex');
crypted += cipher.final('hex');
console.log(crypted);

But when put into a server callback it doesn't work, and throws below err when a request arriving, and node is crush:

http.createServer(function(req, res){
    var userStr = 'a134aad';
    var crypted = cipher.update(userStr, 'utf8', 'hex');
    crypted += cipher.final('hex');
    console.log(crypted);

    res.end('hello');
}).listen(9888)

---------------------------------

7364aee753f0568f7e5171add6868b75
crypto.js:170
  var ret = this._handle.update(data, inputEncoding);
                         ^
Error: Trying to add data in unsupported state
    at Cipher.update (crypto.js:170:26)
    at Server.<anonymous> (C:\Users\58\Desktop\sha256.js:12:26)
    at emitTwo (events.js:126:13)
    at Server.emit (events.js:214:7)
    at parserOnIncoming (_http_server.js:602:12)
    at HTTPParser.parserOnHeadersComplete (_http_common.js:117:23)

Solution

  • Check this out

    Thats mainly because every time we run the encrypt or decrypt we should repeat crypto.createCipher('aes192', secrateKey); and crypto.createDecipher('aes192', secrateKey);

    let secrateKey = "secrateKey";
    const crypto = require('crypto');
    
    
    function encrypt(text) {
        const encryptalgo = crypto.createCipher('aes192', secrateKey);
        let encrypted = encryptalgo.update(text, 'utf8', 'hex');
        encrypted += encryptalgo.final('hex');
        return encrypted;
    }
    
    function decrypt(encrypted) {
        const decryptalgo = crypto.createDecipher('aes192', secrateKey);
        let decrypted = decryptalgo.update(encrypted, 'hex', 'utf8');
        decrypted += decryptalgo.final('utf8');
        return decrypted;
    }
    
    let encryptedText = encrypt("hello");
    console.log(encryptedText);
    
    let decryptedText = decrypt(encryptedText);
    console.log(decryptedText);
    

    Hope this helps!