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");
Copy link

ghost commented Nov 27, 2018

const md5 = data => crypto.createHash('md5').update(data).digest("hex")

can decrypt that data after using this method?

@pranatayudha No you can't. md5 is a hash function

@CQBinh
Copy link

CQBinh commented Jan 10, 2019

Thank bro!

@karacas
Copy link

karacas commented Jan 13, 2019

nice!

@albertininm
Copy link

Hey @beany-vu, were you able to use crypto from the frontend side properly? I'm trying to do the same but it's not working well...

@alfonmga
Copy link

@albertmourato crypto is a NodeJS module, so you can't use it in the frontend side.

@KDWangBoss
Copy link

thanks

@denys-ua
Copy link

Thanks, dude!

@abhijiy
Copy link

abhijiy commented May 29, 2019

Is it possible to decrypt the string? Can someone give me sample code for that? I have used for encryption
crypto.createHash('md5').update(req.body.userType.trim() + constants.APIKEY).digest("hex")

@ankur20us
Copy link

Is it possible to decrypt the string? Can someone give me sample code for that? I have used for encryption
crypto.createHash('md5').update(req.body.userType.trim() + constants.APIKEY).digest("hex")
Hashing is not encryption. You can't come to original state once you get the hashed version.

@smitthakkar1
Copy link

Thnanks bro

@SyedFaraz55
Copy link

Thank you so much @gistfile1.js

@ebnersilva
Copy link

Thank you so much!

@joseananio
Copy link

thanks !!

@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