node.js hash string?

后端 未结 11 2342
暗喜
暗喜 2020-12-02 03:49

I have a string that I want to hash. What\'s the easiest way to generate the hash in node.js?

The hash is for versioning, not security.

11条回答
  •  执笔经年
    2020-12-02 04:25

    Considering the thoughts from http://www.thoughtcrime.org/blog/the-cryptographic-doom-principle/ (in short: FIRST encrypt, THEN authenticate. Afterwards FIRST verify, THEN decrypt) I have implemented the following solution in node.js:

    function encrypt(text,password){
      var cipher = crypto.createCipher(algorithm,password)
      var crypted = cipher.update(text,'utf8','hex')
      crypted += cipher.final('hex');
      return crypted;
    }
    
    function decrypt(text,password){
      var decipher = crypto.createDecipher(algorithm,password)
      var dec = decipher.update(text,'hex','utf8')
      dec += decipher.final('utf8');
      return dec;
    }
    
    function hashText(text){
        var hash = crypto.createHash('md5').update(text).digest("hex");
        //console.log(hash); 
        return hash;
    }
    
    function encryptThenAuthenticate(plainText,pw)
    {
        var encryptedText = encrypt(plainText,pw);
        var hash = hashText(encryptedText);
        return encryptedText+"$"+hash;
    }
    function VerifyThenDecrypt(encryptedAndAuthenticatedText,pw)
    {
        var encryptedAndHashArray = encryptedAndAuthenticatedText.split("$");
        var encrypted = encryptedAndHashArray[0];
        var hash = encryptedAndHashArray[1];
        var hash2Compare = hashText(encrypted);
        if (hash === hash2Compare)
        {
            return decrypt(encrypted,pw); 
        }
    }
    

    It can be tested with:

    var doom = encryptThenAuthenticate("The encrypted text",user.cryptoPassword);
    console.log(VerifyThenDecrypt(doom,user.cryptoPassword));
    

    Hope this helps :-)

提交回复
热议问题