How can I get the sha1 hash of a string in node.js? How can I get the sha1 hash of a string in node.js? javascript javascript

How can I get the sha1 hash of a string in node.js?


See the crypto.createHash() function and the associated hash.update() and hash.digest() functions:

var crypto = require('crypto')var shasum = crypto.createHash('sha1')shasum.update('foo')shasum.digest('hex') // => "0beec7b5ea3f0fdbc95d0dd47f3c5bc275da8a33"


Obligatory: SHA1 is broken, you can compute SHA1 collisions for 45,000 USD. You should use sha256:

var getSHA256ofJSON = function(input){    return crypto.createHash('sha256').update(JSON.stringify(input)).digest('hex')}

To answer your question and make a SHA1 hash:

const INSECURE_ALGORITHM = 'sha1'var getInsecureSHA1ofJSON = function(input){    return crypto.createHash(INSECURE_ALGORITHM).update(JSON.stringify(input)).digest('hex')}

Then:

getSHA256ofJSON('whatever')

or

getSHA256ofJSON(['whatever'])

or

getSHA256ofJSON({'this':'too'})

Official node docs on crypto.createHash()


Tips to prevent issue (bad hash) :

I experienced that NodeJS is hashing the UTF-8 representation of the string. Other languages (like Python, PHP or PERL...) are hashing the byte string.

We can add binary argument to use the byte string.

const crypto = require("crypto");function sha1(data) {    return crypto.createHash("sha1").update(data, "binary").digest("hex");}sha1("Your text ;)");

You can try with : "\xac", "\xd1", "\xb9", "\xe2", "\xbb", "\x93", etc...

Other languages (Python, PHP, ...):

sha1("\xac") //39527c59247a39d18ad48b9947ea738396a3bc47

Nodejs:

sha1 = crypto.createHash("sha1").update("\xac", "binary").digest("hex") //39527c59247a39d18ad48b9947ea738396a3bc47//without:sha1 = crypto.createHash("sha1").update("\xac").digest("hex") //f50eb35d94f1d75480496e54f4b4a472a9148752