Skip to content

Instantly share code, notes, and snippets.

@kitek
Created January 8, 2012 17:50
Show Gist options
  • Save kitek/1579117 to your computer and use it in GitHub Desktop.
Save kitek/1579117 to your computer and use it in GitHub Desktop.
NodeJS create md5 hash from string
var data = "do shash'owania";
var crypto = require('crypto');
crypto.createHash('md5').update(data).digest("hex");
@JOELJOSEPHCHALAKUDY
Copy link

Thank you

@ChandrakantDewangan
Copy link

ChandrakantDewangan commented Jul 31, 2020

Method 1

const crypto = require('crypto');
let hash = crypto.createHash('md5').update('My Message').digest("hex");
console.log(hash);//069840f6917e85a02167febb964f0041

Method 2

const crypto = require('crypto');
const algorithm = 'aes-256-cbc';
const key = crypto.randomBytes(32);
const iv = crypto.randomBytes(16);

function encrypt(text) {
 let cipher = crypto.createCipheriv('aes-256-cbc', Buffer.from(key), iv);
 let encrypted = cipher.update(text);
 encrypted = Buffer.concat([encrypted, cipher.final()]);
 return { iv: iv.toString('hex'), encryptedData: encrypted.toString('hex') };
}

function decrypt(text) {
 let iv = Buffer.from(text.iv, 'hex');
 let encryptedText = Buffer.from(text.encryptedData, 'hex');
 let decipher = crypto.createDecipheriv('aes-256-cbc', Buffer.from(key), iv);
 let decrypted = decipher.update(encryptedText);
 decrypted = Buffer.concat([decrypted, decipher.final()]);
 return decrypted.toString();
}

var hw = encrypt("Some serious stuff")
console.log(hw)
console.log(decrypt(hw))

@niveinii
Copy link

niveinii commented Jul 15, 2021

Did someone manage to use the native crypto to encrypt an array? I want to do this:

let md5sum = crypto.createHash('md5');

let dataArray = ["foo", "bar"];

console.log(md5sum.update(dataArray).digest("hex"));

@ankur20us
Copy link

Stringify array and then apply the hash

@niveinii
Copy link

@anakur20us

Thank you for the quick response, it worked like a charm!

@diegofcornejo
Copy link

Thanks :)

@lucasmiranda-dev
Copy link

Thx man, you save my life

@luisdemarchi
Copy link

    const data = { test: 'hi' };
    const md5sum = crypto.createHash('md5');

    const hash = md5sum.update(JSON.stringify(data), 'utf8').digest('hex');
    console.log(hash);

@kuschanton
Copy link

Thx!

@jeiksegovia
Copy link

🤣11 yr....dang

@taylor-lindores-reeves
Copy link

taylor-lindores-reeves commented Oct 28, 2022

Is it just me or has absolutely nobody here explained the real use of a hash? Like what the heck is the point of having a string like this: af01c2ca629514f48d83cb7e79f05e53544aa44fefb34688c56c78073a4574ec ????

@ankur20us
Copy link

ankur20us commented Oct 28, 2022

If you keep the email in plain string any time if server is hacked they can see the email. But in case you keep it hashed, for equality purposes you can match the hashed version of incoming email with the one stored in db and in that way, your purpose is solved and your data is kinda secured too

This is just one use case, and also, not implemented this simple, but all in all its used this way.

@k3fjeee
Copy link

k3fjeee commented Nov 21, 2022

Hello! Please tell me how can i extract hash from this text:

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

@arash-bizcover
Copy link

@leafyshark calm down brother, there are absolutely many use-cases for hashing, these are some obvious, to validate the integrity of some data:

  1. You have some input on a function that you want to be able to identify if the new revocation of the func has the same input or not. So instead of storing the state of all inputs (possibly large objects) somewhere in a DB, you can just store a hash of it (as a Tag) and just check that.
  2. You want to make an ID (identity) based on many different fields to be able to track, lets say in the LOGS; useful on systems not having any ID set, OR just need to make a dynamic ID for example based on IP address and Email (differentiating a user based on their location)
  3. You have a large file that you want to check if it has been changed or it is the same so you just save and check the hash of it and check the hash later, rather than saying check 3GB of data byte by byte (i.e file checksum)

@the-night-wing
Copy link

thanks

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