Articles of 散列

在NodeJS中不断从stream中生成sha1哈希

我想从stream中读取数据时更新的stream不断生成SHA1哈希。 我需要但不会工作: const crypto = require('crypto'); const hash = crypto.createHash('sha256'); hash.update('abc'); console.log(hash.digest('hex')); // hash of abc hash.update('def'); console.log(hash.digest('hex')); // hash of abcdef 这将不起作用,因为一旦调用了hash.digest(),就不能再次调用hash.update()。 每次添加块时,如何获得string的散列? 没有将整个string加载到内存中 …而不是将整个string再次写入哈希,而是重新使用已经写好的数据块加上新的数据块。 Node.js文档中的所有示例都要求stream在计算SHA1之前结束。 一旦发生这种情况,您不能再将数据写入stream中。 https://nodejs.org/api/crypto.html#crypto_class_hash const crypto = require('crypto'); const hash = crypto.createHash('sha256'); hash.on('readable', () => { const data = hash.read(); if (data) { console.log(data.toString('hex')); // Prints: // 6a2da20943931e9834fc12cfe5bb47bbd9ae43489a30726962b576f4e3993e50 } }); […]

哈希库移动,那么我应该如何改变我的旧代码

由于散列库被单独移动。 所以我应该如何改变这个代码的工作。 var Hash = require('traverse/hash'); Hash({ a : 1, b : 2 }) .map(function (v) { return v + 1 }) .update({ b : 30, c : 42 }) .filter(function (v) { return v % 2 == 0 }) .tap(function () { var anyC = this.some(function (value, key) { return key == 'c' }); […]

用Node.js存储散列

我正在使用Node.js为文件生成一个散列,然后当它改变时,我想在保存之前将它与以前的版本匹配。 例如,如果没有发生变化,则不进行保存。 我尝试下面的代码来完成这个任务(由Node.js文档启发): var filename = __dirname + '/public/team.html'; var shasum = crypto.createHash('sha1'); var s = fs.ReadStream(filename); s.on('data', function(d) { shasum.update(d); }); s.on('end', function() { var d = shasum.digest('hex'); console.log(d + ' ' + filename); }); 我想知道如何保存文件的散列,以便之后匹配。 任何想法都会受到欢迎。

NodeJS:本机插件与外部二进制文件的性能

我正在编写一个NodeJS服务器,除了存储其他数据之外,还需要对用户密码进行哈希处理,然后将其存储在数据库中。 由于创build安全哈希的math密集过程,以及需要完成的大量哈希处理,我select在C中对哈希处理进行编码。 我的问题是这样的:通过执行child_process.exec编码的哈希处理,而不是创buildNodeJS的本地插件,我添加了多less开销? IE每次需要对一段数据进行散列处理时,我将需要以该段数据作为参数调用child_process.exec。

nodejsencryption模块,hash.update()将所有input存储在内存中

我有一个API路由代理从浏览器/客户端上传到AWS S3的file upload。 此API路由尝试在上传文件时对其进行stream式传输,以避免在服务器上caching文件的全部内容。 但是,路由也会尝试计算文件正文的MD5校验和。 随着文件的每个部分被分块, hash.update()方法被调用w / chunk。 http://nodejs.org/api/crypto.html#crypto_hash_update_data_input_encoding var crypto = require('crypto'); var hash = crypto.createHash('md5'); function write (chunk) { // invoked many times as file is uploaded hash.update(chunk); } function done() { // will hash buffer all chunks in memory at this point? hash.digest('hex'); } Hash的实例是否会缓冲文件的所有内容以执行散列计算(从而破坏了避免caching整个文件内存的目标)? 或者可以递增地计算MD5散列,而不需要整个input可用于执行计算?

从两个不同的值创build一个公用密钥,不pipe顺序如何

例如:我有key1 =“abc”和key2 =“xyz”。 我想写一个函数,将返回相同的值,不pipe参数的顺序。 所以foo(key1,key2)和foo(key2,key1)应该都是相同的值ex。 “123”。 我正在考虑某种哈希algorithm,但不太清楚最好的方法是尽可能地提高效率。 将不胜感激任何想法,我正在执行它在JavaScript / node.js

由于crypto.DEFAULT_ENCODING ='binary',节点6升级导致aws-sdk的SignatureDoesNotMatch错误。

我已经从节点4移动到节点6,这导致任何使用aws-sdk返回以下错误消息: SignatureDoesNotMatch:我们计算的请求签名与您提供的签名不匹配。 检查您的AWS秘密访问密钥和签名方法。 详细信息请参阅服务文档。 看看代码,这似乎是由我的代码调用encryption来创build和validation散列和集合 crypto.DEFAULT_ENCODING = 'binary' 如果我从“二进制”更改为“缓冲区”(这是默认),aws-sdk的作品,但我的代码无法validation旧哈希值。 这是用来创build和检查散列的代码: crypto.pbkdf2(password, salt, iterations, keysize, function (err, derivedKey) { callback(null, [salt.toString('base64'), new Buffer(derivedKey).toString('base64')]) }); 查看crypto.DEFAULT_ENCODING的encryption文档我不确定使用缓冲区和二进制文件有什么区别。 有没有办法使用二进制编码仅用于这种encryption方法,而不会影响aws-sdk? 如果没有的话,是否有一种方法可以将使用“缓冲”编码的pbkdf2产生的散列转换为使用“二进制”编码时产生的散列?

在Node / Express中哈希,盐和保存密码

我需要Node的标准库中的Crypto模块。 我有这个处理registry单的POST路由: app.post('/superadmin/add-account', function(req, res) { // Shorthand variable var doc = req.body; crypto.randomBytes(32, function(err, buf) { if (err) throw err; // Sanitise and transform user input … // Validate user input … var errors = validator.getErrors(); // Generate new object data doc.salt = buf; doc.pass = doc.salt + 'justForNow'; console.log(doc); 当我输出文档(req.body),现在我得到了一些值,似乎对我来说是奇怪的…在控制台输出buf大多由类似于一个问号框里面的charachter组成。 它是否正确? 但是当我保存buf到doc.salt并输出这个我完全得到了一些东西…“慢缓冲AE是C5 A3 […]

根据mongodb'_id`属性创buildhashid

我有我的mongo数据库架构如下: var MyTable = mongoose.model('items', { name: String, keyId: String }); 我想将keyId作为正在创build的项目的“_id”的哈希值来存储。 例如。 说,我添加一个项目分贝“你好世界”,和mongodb会创build一些“ID”插入时的项目。 我想利用_id这样我就可以使用它并为插入的相同项目生成一个hashid。 像这样的东西: var Hashids = require("hashids"), hashids = new Hashids("this is my salt"); var id = hashids.encrypt("507f191e810c19729de860ea"); 有没有办法,我可以事先知道身份证。 或者我可以让mongodb根据我指定的标准为我的id字段生成值。

Node.js:将请求的inputinput到crypto.hash中

我想从URL中计算资源的散列(例如PDF)。 为此,我写了 const computeHash = co.wrap(function* main(url) { const response = yield promisify(request)(url); // assume response.status === 200 const buf = new Uint8Array(response.arrayBuffer); const hash = crypto.createHash('sha1'); hash.update(buf, 'binary'); return hash.digest('hex'); }); 要使用的 const hash = yield computeHash('http://arxiv.org/pdf/1001.1234v3.pdf'); 我喜欢的代码是: 这是一个发电机,所以我可以yield它。 距离async / await只有一步之遥。 我不喜欢的东西: 它没有正确计算散列。 🙂 request完成,响应主体作为一个整体传送到hash函数中。 我宁愿将request的输出request给散列函数。 任何提示?