var filename = process.argv[2];
var crypto = require('crypto');
var fs = require('fs');
var md5sum = crypto.createHash('md5');
var s = fs.ReadStream(filename);
s.on('data', function(d) {
md5sum.update(d);
});
s.on('end', function() {
var d = md5sum.digest('hex');
console.log(d + ' ' + filename);
});
17
如果你只想md5哈希一个简单的字符串我发现这对我有用 .
var crypto = require('crypto');
var name = 'braitsch';
var hash = crypto.createHash('md5').update(name).digest('hex');
console.log(hash); // 9b74c9897bac770ffc029102a200c5de
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);
}
}
它可以测试:
var doom = encryptThenAuthenticate("The encrypted text",user.cryptoPassword);
console.log(VerifyThenDecrypt(doom,user.cryptoPassword));
希望这可以帮助 :-)
186
我用blueimp-md5这是"Compatible with server-side environments like Node.js, module loaders like RequireJS, Browserify or webpack and all web browsers."
像这样使用它:
var md5 = require("blueimp-md5");
var myHashedString = createHash('GreensterRox');
createHash(myString){
return md5(myString);
}
如果在打开时传递哈希值,那么将它们加盐以便人们更难以重新创建它们总是一个好主意:
createHash(myString){
var salt = 'HnasBzbxH9';
return md5(myString+salt);
}
8 回答
看看crypto.createHash(algorithm)
如果你只想md5哈希一个简单的字符串我发现这对我有用 .
Node的加密模块API仍然不稳定 .
从版本4.0.0开始,本机Crypto模块不再不稳定 . 来自official documentation:
因此,在没有外部依赖性的情况下使用本机实现应该被认为是安全的 .
作为参考,当Crypto模块仍然不稳定时,建议将下面提到的模块作为替代解决方案 .
您也可以使用其中一个模块sha1或md5来完成这项工作 .
然后
要么
然后
(MD5不安全,但经常被像Gravatar这样的服务使用 . )
The API of these modules won't change!
我遇到了其他答案的问题 . 我建议你将编码参数设置为
binary
以使用字节字符串,并防止Javascript(NodeJS)和其他语言/服务(如Python,PHP,Github)之间的不同哈希...如果您不使用此代码,您可以在NodeJS和Python之间获得不同的哈希值...
如何获得与Python,PHP,Perl,Github相同的哈希(并防止出现问题):
我们可以添加二进制参数来使用字节串 .
代码:
Documentation:
crypto.createHash(algorithm[, options]): 该算法取决于平台上OpenSSL版本支持的可用算法 .
hash.digest([encoding]): 编码可以是'hex','latin1'或'base64' . (基数64更长) .
您可以通过以下方式解决问题:sha256(“\ xac”),“\ xd1”,“\ xb9”,“\ xe2”,“\ xbb”,“\ x93”等...
.update(data, "binary")
:默认情况下
crypto
模块使这很容易 .Build :
用法:
在这里,您可以对您的硬件上所有支持的哈希进行基准测试,您的node.js版本支持这些哈希 . 有些是加密的,有些只是校验和 . 它为每个算法计算“Hello World”100万次 . 每种算法可能需要大约1-15秒(使用Node.js 4.2.2在标准Google Computing Engine上测试) .
结果:
DSA:1992ms
DSA-SHA:1960ms
DSA-SHA1:2062ms
DSA-SHA1-old:2124ms
RSA-MD4:1893ms
RSA-MD5:1982ms
RSA-MDC2:2797ms
RSA-RIPEMD160:2101ms
RSA-SHA:1948ms
RSA-SHA1:1908ms
RSA-SHA1-2:2042ms
RSA-SHA224:2176ms
RSA-SHA256:2158ms
RSA-SHA384:2290ms
RSA-SHA512:2357ms
dsaEncryption:1936ms
dsaWithSHA:1910ms
dsaWithSHA1:1926ms
dss1:1928ms
ecdsa-with-SHA1:1880ms
md4:1833ms
md4WithRSAEncryption:1925ms
md5:1863ms
md5WithRSAEncryption:1923ms
mdc2:2729ms
mdc2WithRSA:2890ms
成熟:2101ms
ripemd160:2153ms
ripemd160WithRSA:2210ms
rmd160:2146ms
沙:1929ms
sha1:1880ms
sha1WithRSAEncryption:1957ms
sha224:2121ms
sha224WithRSAEncryption:2290ms
sha256:2134ms
sha256WithRSAEncryption:2190ms
sha384:2181ms
sha384WithRSAEncryption:2343ms
sha512:2371ms
sha512WithRSAEncryption:2434ms
shaWithRSAEncryption:1966ms
ssl2-md5:1853ms
ssl3-md5:1868ms
ssl3-sha1:1971ms
漩涡:2578ms
考虑来自http://www.thoughtcrime.org/blog/the-cryptographic-doom-principle/的想法(简而言之:FIRST加密,然后进行身份验证 . 然后FIRST验证,然后解密)我在node.js中实现了以下解决方案:
它可以测试:
希望这可以帮助 :-)
我用blueimp-md5这是"Compatible with server-side environments like Node.js, module loaders like RequireJS, Browserify or webpack and all web browsers."
像这样使用它:
如果在打开时传递哈希值,那么将它们加盐以便人们更难以重新创建它们总是一个好主意: