使用 pbkdf2 的 SALT 和 HASH

2024-01-09

我使用以下方法从 NodeJS 中的加密库创建加盐和哈希密码:

crypto.randomBytes(size, [callback])
crypto.pbkdf2(password, salt, iterations, keylen, callback)

对于 randomBytes 调用(创建 SALT),我应该使用什么大小?我听说过 128 位盐,也许高达 256 位。看起来这个函数使用的大小以字节为单位,所以我可以假设 32 (256 位)的大小就足够了吗?

对于 pbkdf2 调用,最佳迭代次数是多少以及密钥 (keylen) 的最佳长度是多少?

另外,对于存储,我看到了将盐、长度、迭代和 derviedkey 存储在同一列中的示例。我正在使用一个将 4 分隔开的示例::, i.e.:

salt::derivedKey::keyLength::iterations

这样做,我就可以分开了::获取 4 个值,因此我可以根据提供的密码生成派生密钥以查看其是否匹配。这是存储这个的正确方法吗?或者我应该在结合这些价值观时更加“欺骗”一点?


1. 随机字节大小:

盐的大小应至少与哈希函数的大小相同,因此对于sha256您应该至少使用 32 个字节。 Node.js 加密货币pbkdf2 uses SHA1,所以 20 个字节应该是最小值。但是,您至少应该使用的是64 位(8 字节),如#3 中所述。 (来源:https://crackstation.net/hashing-security.htm https://crackstation.net/hashing-security.htm).

2.PBKDF2迭代次数:

See 这个问题 https://security.stackexchange.com/questions/3959/recommended-of-iterations-when-using-pkbdf2-sha256进行精彩的讨论。我从中得到了10.000 范围在不影响性能的情况下就足够了,但这取决于硬件/性能。

3.PBKDF2长度:

See 其他讨论 https://security.stackexchange.com/questions/31564/key-length-and-hash-function-in-pbkdf2关于密钥长度。该参数再次是使用的哈希函数,在您的情况下是 SHA-1,因此 20 字节是正确的值。自从PBKDF2的标准 http://en.wikipedia.org/wiki/PBKDF2建议盐至少64 bits,生成小于输入的密钥是一种浪费,因此至少使用8 bytes。不要使用大于 20 的输出长度,因为它不提供额外的安全性,但每次 20 的倍数都会使计算时间加倍。

4. 如何存储变量:

上面所有链接中都讨论过(特别是首先 https://crackstation.net/hashing-security.htm),盐应该与密码一起保存(但永远不要在其他地方重复使用),通常是将其首先附加到结果字符串(salt:hash)或另一个数据库列中。

就其他变量而言,他们的知识对于破坏安全性并不重要(如柯克霍夫斯原理 https://en.wikipedia.org/wiki/Kerckhoffs%27s_principle,这样您就可以在任何地方安全地对其进行参数化。你用“::”分隔它们的方法很好,但你正在保存额外的信息. Crackstation 的代码 https://crackstation.net/hashing-security.htm只保存"algorithm:iterations:salt:hash",所以在你的情况下,"salt::derivedKey::iterations"是你所需要的全部。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

使用 pbkdf2 的 SALT 和 HASH 的相关文章

  • 无法使用 Tedious 和 Node JS 连接到本地 SQL Server 数据库

    我正在尝试连接到本地计算机上的 SQL Server 我正在尝试使用乏味和乏味 ntlm 两者的配置如下 var tds require tedious ntlm var tds require tedious var config use
  • 通过套接字的身份验证方法

    我正在尝试通过套接字进行身份验证sailsjs and passport 挑战似乎在于套接字连接没有会话 并且 sailsjs 模拟请求对象 导致它没有 Passport 中间件设置 这导致nodejs抛出一个错误 说req对象没有调用的方
  • 用 Node.js 编写的 Azure Functions 可以访问连接字符串吗?

    Azure Function App 的应用程序设置包含可在门户中设置的数据库连接字符串的值 在 C 中 可以使用以下方式访问它们 ConfigurationManager ConnectionStrings ConnectionStrin
  • 让 Express 服务器接受 CORS 请求

    我的 Express 服务器运行在 http localhost 3000 我称之为网络服务器 我有另一个应用程序在 localhost 8100 上运行 我简称为 应用程序 当我的应用程序调用网络服务器时 我收到以下消息 XMLHTTPR
  • 如何在express中动态渲染/加载页面?

    我需要使用express gt 3 0 框架动态加载 渲染nodejs v1 8 15 中页面的一部分 一般来说 我想创建一个单页应用程序 我在页面顶部有一个带有链接的菜单 单击链接将更改下面的内容 就像 AJAX 页面加载一样 例如 gt
  • 如何使用 next.js 将动态 html 元素注入到页面?

    如何使用next js动态注入html元素到页面 这些元素未知类型 例如 输入 复选框 img 使用返回 json 类型的 api 指定此元素 如下所示 id rooms title Rooms order 1 type string wi
  • 自动执行异步函数

    下面的代码可以完美运行 const Course mongoose model Course courseSchema async function foo const nodeCourse new Course name Node JS
  • 我如何在使用sequelize的包含模型中使用限制

    我想从关注模型中获取限制为 2 的用户图像 Models const Follow connector define Follow no type Sequelize INTEGER primaryKey true autoIncremen
  • 我应该在 Promise.all 中使用 wait 吗?

    我正在构建快速中间件 以对数据库进行两次异步调用 以检查用户名或电子邮件是否已在使用中 这些函数返回的承诺没有捕获 因为我想将数据库逻辑与 req res next 逻辑分开 并且我有集中的错误处理 需要next作为一个论点 在我对本地环境
  • Passport-local-mongoose:createStrategy 不是函数/authenticate 不是函数

    我正在构建这个启动项目 https github com cj wang mean start tree 424e6056e33bb16874ae808daf3780d53309296f并尝试添加用户登录护照本地猫鼬 https www n
  • 使用 npm 作为构建工具连接文件

    我最近发现我可以使用 npm 作为任务运行程序 而不是 gulp 或 grunt 到目前为止 一切都很棒 lint stylus jade uglify watch 等 但串联部分 我似乎无法实现 gulp 是这样的 gulp task s
  • Nodemailer:从未收到问候语

    当尝试使用 Nodemailer 在 Node 内发送电子邮件时 https github com nodemailer nodemailer https github com nodemailer nodemailer 调用sendMai
  • EJS在JS onload函数中访问express变量

    我知道你可以像这样获取 ejs 文件中变量的值 h1 h1 如果我要在同一个 ejs 页面的 onload javascript 函数中使用相同的标题变量 我将如何使用它 例如 这个函数产生一个控制台错误说 未捕获的语法错误 意外的标识符
  • 如何删除控制台中打印的字符

    我一直在搜索如何用其他语言执行此操作 发现必须使用特殊字符 b 来删除最后一个字符 如何删除控制台应用程序中打印的字符 linux https stackoverflow com questions 430713 how do i eras
  • 运行“gulp”命令时出现“错误 [ERR_REQUIRE_ESM]”

    我是新来的Gulp并尝试自动化一些任务 这是我的环境设置 npm version 8 1 0 node version 17 0 1 gulp CLI version 2 3 0 and gulp version 4 0 2 这是我的gul
  • 从 readFile 返回未定义[重复]

    这个问题在这里已经有答案了 我正在尝试让以下代码工作 use strict var fs require fs var fileName readme txt var str fs readFile fileName utf8 functi
  • 在 NodeJS 中将子进程的输出保存在父进程的变量中

    我想在 NodeJS 中启动一个子进程并将其输出保存到一个变量中 以下代码将其提供给标准输出 require child process execSync echo Hello World stdio inherit 我的想法与此代码类似
  • 使用nodegit切换分支/标签

    我整个早上都在尝试打开现有的存储库并使用 nodegit 更改分支或标签 文档内容很丰富 但似乎已经过时了 关于我做错了什么有什么想法吗 var NodeGit require nodegit var open NodeGit Reposi
  • 使用node.js安装xml2json时出错

    我尝试为 node js 安装 xml2json 包 但它给了我错误 Error are as below 我的系统配置如下 Node js 版本 v5 4 1 npm 版本 3 3 12 操作系统 Windows 10 64 位 pyth
  • 摆脱node-jsx

    在我的 NodeJS 应用程序的路由器中 我想渲染一个 React 应用程序 由于它没有被浏览器化 并且已反应 因此它返回unexpected token lt 构建时出错 我发现如果我require node jsx install 它不

随机推荐

  • 动态更改 setInterval 值

    我想动态更改 setInterval 的间隔值 由于 setInterval 回调函数中存在循环 我正在苦苦挣扎 我在stackoverflow上看到了太多问题 但没有任何解决方案可以帮助我 如果有人知道答案 请举例说明 谢谢 这是我的代码
  • 如何使用我的私人 dart 包而不显示在 pub dart lang 上?

    由于我的公司协议 我不想将 dart 包发布到 pub 如何仅将我的 dart 包用于我的公司而不显示在 pub dart lang 上 我查过这个链接https github com dart lang pub issues 1050 h
  • 将 css 变量与 scss 变暗和变亮过滤器一起使用

    我想使用scsslighten and darken CSS4 的函数var 像这样 box shadow inset 0px 2px 50px 45px darken var colorbtn 20 看起来不行 gulp这样写 Error
  • 在我的情况下如何膨胀活动?

    我想实现这样的布局 我的主要活动布局 main xml 请鼠标右键点击以下图片查看图片 我又做了一个内容活动 内容设置为内容 one xml 应该用作上述布局的一部分 右侧部分 我知道我可以通过以下方式膨胀布局 LinearLayout m
  • 在会话中访问数组变量(CodeIgniter)

    我有一个名为 config 的数组 我正在尝试从会话中的数组中回显变量 我试过了 echo this gt session gt userdata config item 但它不起作用 我这里的语法有什么问题吗 我已经打印了我的会话 并且这
  • 词干提取会损害文本分类的精度吗?

    我读到词干提取会损害准确性 但会提高文本分类的召回率 这是怎么发生的 当您进行词干提取时 您会增加查询和示例文档之间的匹配数量 对吗 总是一样的 如果你提高回忆 你就进行了概括 因此 你会失去精确度 将单词词干合并在一起 一方面 应该合并在
  • WCF Silverlight 服务返回自定义错误,但 HTTP 500 响应不是 200

    看来我一直在为 Silverlight WCF 服务中的自定义错误而烦恼 所以我会很高兴尽力买啤酒任何人都可以帮我解决这个问题 经过一番痛苦之后 我终于让我的 WCF 服务抛出自定义错误 ParameterValidationFault 并
  • 激活器:未找到命令

    我正在尝试在我的 Linux 系统中安装 activator 所以首先我安装java sudo add apt repository ppa webupd8team java sudo apt get update sudo apt get
  • Android源码框架修改重建但在模拟器中生效

    我修改 framework base services core java com android server am ActivityManagerService java一些 logcat 输出字符串 我尝试使用不同的方法来重建它 ma
  • 如何将 UIImage 序列化为 JSON?

    我在用 imageData UIImagePNGRepresentation imgvw image 并在发帖时 dic setObject imagedata forKey image after NSData data NSJSONSe
  • TensfoFlow:线性回归损失随着连续纪元的增加(而不是减少)

    我正在学习 TensorFlow 并尝试将其应用于简单的线性回归问题 data是形状为 42x2 的 numpy ndarray 我有点困惑为什么在每个连续的纪元之后损失都在增加 损失不是会随着每个连续的纪元而减少吗 这是我的代码 如果您也
  • SQL Server 2012 连接字符串:无法再找到服务器?

    我刚刚安装了 VS2012 pro RC 和 SQL server Express 2012 我去运行我的应用程序 但收到此错误 连接字符串中的数据源值指定 SQL Server 的实例 那个没有安装 要解决此问题 您可以选择安装 SQL
  • 如何在创建文件的过程中显示进度条?

    如何在创建 PDF 文件时单击按钮时显示进度条 并在创建文件完成后隐藏进度条 public class TwoFragment extends android support v4 app Fragment private View v I
  • 从类调用表单时的 StackOverflow

    我得到了StackOverflowException当我从课堂上调用表格时 In my MainForm我打电话给Youtube cs使用这个类 Youtube yt new Youtube 然后在我的Youtube我称之为MainForm
  • 使用逗号格式化为数字 JSF

    如何在 JSF 中格式化值
  • WCF 序列化异常 - NetDataContractSerializer

    我在尝试将数据集合发送到我们的服务时遇到错误 然而 如果我只向集合中添加一个项目 那么它就可以正常工作 一旦我添加超过一项 我就会收到以下错误 NetDataContractSerializer 不支持使用 SmartTrade Share
  • 如何正确关闭 Node.js TCP 服务器?

    我在 Google 或 SO 上找不到明确的答案 我认识一个net Server实例有一个close方法不允许更多客户端进入 但它不会断开已连接的客户端 我怎样才能做到这一点 我知道如何使用 Http 来完成此操作 我想我是在问它与 Tcp
  • 如何使用 AVAudioPlayer 更快*和*更高音调地播放音频?

    问题陈述 我的应用程序中有一组声音效果 存储为 m4a我想要以各种速度和音调播放的文件 AAC 格式 48 KHz 16 位 而无需将所有变体预先生成为单独的文件 虽然 rate的财产AVAudioPlayer对象可以改变播放速度 它始终保
  • 将项目拖放到嵌套下拉列表中(Angular 7 Material CDK)

    我在使用 Angular Material CDK 的拖放功能时遇到问题 我正在尝试使用可以嵌套任意深度的嵌套 DropList 无法将项目拖动到 DropList 的第三层 除此之外 当从第一级拖动到第二级时 项目会来回跳跃 解决方法来自
  • 使用 pbkdf2 的 SALT 和 HASH

    我使用以下方法从 NodeJS 中的加密库创建加盐和哈希密码 crypto randomBytes size callback crypto pbkdf2 password salt iterations keylen callback 对