当前位置: 首页 > 面试题库 >

使用加密模块的流功能获取文件的哈希(即:不使用hash.update和hash.digest)

轩辕庆
2023-03-14
问题内容

cryptonode.js
的模块(至少在撰写本文时)仍未被认为是稳定的,因此API可能会发生变化。实际上,互联网上每个人用来获取文件的哈希值(md5,sha1,…)的方法都被认为是旧方法(来自Hashclass的文档)(注:强调我的方法):

类:哈希

用于创建数据的哈希摘要的类。

这是一个既可读又可写的流。写入的数据用于计算哈希。流的可写端结束后,使用read()方法获取计算得出的哈希摘要。在 传统的更新和摘要方法
也支持。

由crypto.createHash返回。

尽管hash.updatehash.digest正在考虑遗产,只是引用片段上面的例子中使用它们。

不使用这些传统方法获取哈希的正确方法是什么?


问题答案:

从问题中引用的摘录中:

[Hash类]它是可读写的流。写入的数据用于计算哈希。流的可写端结束后,使用read()方法获取计算得出的哈希摘要。

因此,您需要对一些文本进行哈希处理是:

var crypto = require('crypto');

// change to 'md5' if you want an MD5 hash
var hash = crypto.createHash('sha1');

// change to 'binary' if you want a binary hash.
hash.setEncoding('hex');

// the text that you want to hash
hash.write('hello world');

// very important! You cannot read from the stream until you have called end()
hash.end();

// and now you get the resulting hash
var sha1sum = hash.read();

如果要获取文件的哈希,最好的方法是从文件创建ReadStream并将其通过管道传递给哈希:

var fs = require('fs');
var crypto = require('crypto');

// the file you want to get the hash    
var fd = fs.createReadStream('/some/file/name.txt');
var hash = crypto.createHash('sha1');
hash.setEncoding('hex');

fd.on('end', function() {
    hash.end();
    console.log(hash.read()); // the desired sha1sum
});

// read all file and pipe it (write it) to the hash object
fd.pipe(hash);


 类似资料:
  • 在查看了用于生成 Java MD5 和 SHA* 哈希的多个在线参考后,我注意到纯文本(文件字符串)之前经历了某些准备 PS:我想答案与Java和Digest对象如何处理它们的业务有关,我问这个问题的动机是为了理解这种行为,并可能获得一些深入解释这一点的文档/文献的参考资料。 丹科!

  • 我是在阅读了一些关于php中会话管理的主题后开始进行安全讨论的,请查看:https://paragonie.com/blog/2015/04/secure-authentication-php-with-long-termer-persistence#title.2 引自章节:胡椒还是不胡椒? 一个更好的解决方案是,在将散列插入数据库之前对其进行加密,如果使用硬件分离,这种解决方案尤其有用。有了这

  • 我正在使用BCryptPasswordEncoder使用spring security。现在对于更改密码,我需要做的是比较用户提供的现有密码和DB值。 但是由于salt是由动态生成的,所以每次我从下面的方法得到不同的散列值,并且不一定会与我的DB值匹配。 解决这个问题的办法是什么?我能识别用于我的DB字段的盐并在上面的方法中使用相同的盐吗?

  • 我正在编写一个Java web服务,它使用来自网络中一些客户端的iText对PDF文档进行签名。文档的签名正确,可以使用外部工具进行验证。然而,由于一些法律限制,为了将此文档存储在一个正式的文档存储库中,我必须提供来自签名的散列/摘要消息。 我已经尝试了几乎所有的方法来获得那个散列,但我能得到的最接近的方法是用下面的代码段以字符串的形式获得整个签名(证书+散列/摘要+时间戳)(请原谅字符串和[1]

  • 简介 Laravel Hash facade 为存储用户密码提供了安全的 Bcrypt 和 Argon2 哈希。如果您使用 Laravel 应用程序中内置的 LoginController 和 RegisterController 类,则默认情况下它们将使用 Bcrypt 进行注册和身份验证。 {tip} Bcrypt 是哈希密码的理想选择,因为它的「加密系数」可以任意调整,这意味着生成哈希所需的

  • 问题内容: 我在一个基于Java的系统中工作,我需要为视觉显示中的某些元素设置一个ID。一类元素是字符串,因此我决定使用String.hashCode()方法来获取这些元素的唯一标识符。 但是,我遇到的问题是,如果id为负,并且经常返回负值,那么我正在borks中工作的系统。一种快速的解决方案是仅在哈希码调用周围使用Math.abs()来确保得到肯定的结果。我想知道这种方法是,两个不同的元素具有相