我无法运行我的 Node Express 服务器,因为下载和安装脚本失败。我使用的是 Mac 操作系统 10.4.14。我希望能够下载最新的 scrypt 库。
我尝试删除 .node-gyp 目录,删除 node_modules 并从头开始构建,并尝试了从 12.3 到 11.x 的各种版本的节点。我也尝试安装旧版本的 scrypt 但失败并出现相同的错误。我尝试访问node-gyp的github问题页面,但没有一个建议适合我的情况: https: //github.com/nodejs/node-gyp/issues/809
node node-scrypt-preinstall.js
> scrypt@6.0.3 install /usr/local/lib/node_modules/scrypt
> node-gyp rebuild
SOLINK_MODULE(target) Release/copied_files.node
CC(target) Release/obj.target/scrypt_wrapper/src/util/memlimit.o
CC(target) Release/obj.target/scrypt_wrapper/src/scryptwrapper/keyderivation.o
CC(target) Release/obj.target/scrypt_wrapper/src/scryptwrapper/pickparams.o
CC(target) Release/obj.target/scrypt_wrapper/src/scryptwrapper/hash.o
LIBTOOL-STATIC Release/scrypt_wrapper.a
CC(target) Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt.o
CC(target) Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/crypto/crypto_scrypt_smix.o
CC(target) Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/warnp.o
CC(target) Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/alg/sha256.o
CC(target) Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/libcperciva/util/insecure_memzero.o
CC(target) Release/obj.target/scrypt_lib/scrypt/scrypt-1.2.0/lib/scryptenc/scryptenc_cpuperf.o
LIBTOOL-STATIC Release/scrypt_lib.a
CXX(target) Release/obj.target/scrypt/src/node-boilerplate/scrypt_common.o
CXX(target) Release/obj.target/scrypt/src/node-boilerplate/scrypt_params_async.o
In file included from ../src/node-boilerplate/scrypt_params_async.cc:4:
In file included from ../src/node-boilerplate/inc/scrypt_params_async.h:28:
In file included from ../src/node-boilerplate/inc/scrypt_async.h:28:
Run Code Online (Sandbox Code Playgroud)
{...显示各种失败和警告}
8 warnings and …Run Code Online (Sandbox Code Playgroud) 我有一个使用MD5进行盐渍和散列的旧密码数据库.我想更新系统,以便数据更安全.
第一种选择是在用户登录并在一段时间后停用旧用户时将用户转换为新的哈希方案(Salt + Scrypt或PBKDF2 HMACSHA256),这样他们就必须使用密码恢复功能,该功能会自动更新其哈希值.
允许我立即升级所有人的另一个选项是采用现有的MD5哈希值,为每个哈希值添加一个新的随机盐值,然后使用新的哈希方案(Salt + Scrypt或PBKDF2 HMACSHA256)对结果进行哈希并存储该值到数据库并删除旧值.
然后当用户登录时,我将不得不应用旧方法,然后应用新方法.我更喜欢第二个选项,因为它允许我尽早从数据库中删除所有旧的不安全哈希.
盐和重现现有的哈希是否安全?MD5是如此破碎,以至于我可以运行脚本来解密密码并使用新方案重新散列它们吗?
或者最好的解决方案是两种方案的组合?这样我就不必在数据库中保留现有的MD5哈希不安全状态,我可以将用户迁移到新系统一段时间吗?
具体这个。我知道大多数 bcrypt 实现大约有 50 个字符,但我很确定 scrypt 并非如此。
我想运行区块链应用程序,但出现此错误。
npm 错误!代码 ELIFECYCLE
npm ERR!错误号 1
npm 错误号!scrypt@6.0.3 安装:node-gyp rebuild
npm 错误!退出状态 1
npm ERR!
npm 错误!scrypt@6.0.3 安装脚本失败。
npm 错误!这可能不是 npm 的问题。
上面可能有额外的日志输出。
我曾尝试删除 node_modules、npm缓存验证并npm install再次尝试。我已经卸载和重新安装npm和nodejs。我的npm版本是6.12.0和node版本v12.13.0
我遇到了一些我为密码认证库编写的Go代码的问题.一般的想法是提供2个函数,Check()和New(),它们都提供了密码和256位HMAC密钥.Check()函数还提供256位salt和256位散列,并返回一个布尔值.New()函数返回一个新的随机salt,它是相应的哈希值.这两个函数都依赖于辅助函数hash(),它使用scrypt进行键延长,并且可以生成输出哈希.
当我最初编写它时,这是有效的(事实证明,我已经使用了早期丢失的代码修订版生成的测试数据).
我现在遇到的问题是,当提供由旧版本代码生成的数据时,Check()函数似乎工作得很好,但现在似乎失败了代码自己的New()函数生成的任何数据(两者都使用底层的hash()函数).
我知道,我应该从一开始就有git版本控制代码!我现在已经吸取了教训.
我已将函数分组并将问题快速演示到一个.go文件中,如下所示,并添加了一些输出用于调试:
package main
import (
"code.google.com/p/go.crypto/scrypt"
"crypto/hmac"
"crypto/rand"
"crypto/sha256"
"crypto/subtle"
"errors"
"fmt"
"io"
)
// Constants for scrypt. See code.google.com/p/go.crypto/scrypt
const (
KEYLENGTH = 32
N = 16384
R = 8
P = 1
)
// hash takes an HMAC key, a password and a salt (as byte slices)
// scrypt transforms the password and salt, and then HMAC transforms the result.
// Returns the resulting 256 bit hash.
func hash(hmk, pw, s []byte) (h []byte, …Run Code Online (Sandbox Code Playgroud) 我在计算RbNaCl和Go的实现之间的相同scrypt摘要时遇到了问题.
这是我用rbnacl生成密钥的方式:
opslimit = 2**20
memlimit = 2**24
digest_size = 32
digest = RbNaCl::PasswordHash.scrypt(
password,
salt,
opslimit,
memlimit,
digest_size
)
Run Code Online (Sandbox Code Playgroud)
已从文档中找到opslimit和memlimit参数值.
这是我尝试用Go复制相同的结果:
N := 32768
r := 8
p := 1
keyLength := 32
secretKeyBytes, _ := scrypt.Key(password, salt, N, r, p, keyLength)
Run Code Online (Sandbox Code Playgroud)
对值Ñ,- [R ,p和keyLength从得到的文档.
password和salt具有相同的值.
我不是密码学家,但据我所知,应该有相同的成本因素值来获得相同的摘要?这里的问题是,由于两种实现都采用不同的参数计数,因此我也很难找到正确的组合.任何想法如何使这两个实现之间的成本因素匹配,以便我可以计算两种编程语言之间相同的scrypt哈希?
我在运行命令npm install时创建了 nodejs 项目,但它因某些错误而失败
同一个项目正在ubuntu系统上运行,但是当我在mac系统上克隆此代码并尝试运行 npm install 时,它失败并出现一些错误
我认为 scrypt 模块有问题,但我不知道确切原因请帮助我,提前致谢
操作系统:MAC
节点:10.15
Npm:6.0
请参阅下面的错误:-
WareWolf:mynodeapp$ npm install
> scrypt@6.0.3 preinstall /node_modules/scrypt
> node node-scrypt-preinstall.js
Error: Error: Command failed: ./configure
configure: error: /node_modules/scrypt/scrypt/scrypt-1.2.0':
configure: error: C compiler cannot create executables
See `config.log' for more details
> scrypt@6.0.3 install /node_modules/scrypt
> node-gyp rebuild
gyp ERR! build error
gyp ERR! stack Error: `make` failed with exit code: 1
gyp ERR! stack at ChildProcess.onExit (/usr/local/Cellar/nvm/0.34.0/versions/node/v10.15.0/lib/node_modules/npm/node_modules/node-gyp/lib/build.js:262:23)
gyp ERR! …Run Code Online (Sandbox Code Playgroud) 我通过使用scrypt算法然后存储该字符串,在一分钟内将密码存储在数据库中.
我正在进行密码检查,然后对所提供的密码进行哈希处理,并对其进行检查.
我的问题是,我是否想要增加更多安全性?我也应该加密加密的字符串吗?
scrypt程序是否在幕后使用散列算法?
什么是scrypt的输出大小(我的意思是底层算法,是4096位)?
我使用这个scrypt实现实现了一个简单的gode,用于使用Go确定性地生成密码.我的代码在这里,这是一个相关部分的提取:
const keyLen = 8
// recommended cost parameters for interactive login in 2009
const N = 16384
const r = 8
const p = 1
func main() {
dk, _ := scrypt.Key([]byte("mypassword"), []byte("mysalt"), N, r, p, keyLen)
for _, v := range dk {
fmt.Printf("%x ", v)
}
fmt.Println()
}
Run Code Online (Sandbox Code Playgroud)
运行代码我得到输出:
19 e5 59 39 fe 1 2b ef
Run Code Online (Sandbox Code Playgroud)
然而,当我尝试C实现基于libscrypt我会不得到的结果相同.我会得到:
68 56 66 b2 86 19 2f 6e
Run Code Online (Sandbox Code Playgroud)
C代码在这里,这是主要部分: …
我试图为节点的内置加密模块找到一个比较或验证功能,特别是对于 scrypt,因为我使用的大多数密码散列模块都有这样的功能。然后,我发现了为什么这是一项不可能完成的任务:使用相同参数使用这些算法生成的所有哈希都会生成相同的字符串(技术上是缓冲区)。许多crypto的散列函数都是这种情况,包括它的pbkdf2实现。
为什么这是安全的?密码/消息散列函数的全部(现代)点不是您不能使用相同的输入再次生成相同的密码/消息吗?这就是各种 bcrypt 模块的工作方式,以及 scrypt 的原始版本,我正在询问的内置版本是从该版本派生出来的。
例如:
let scryptHash1;
let scryptHash2;
let scryptHash3;
let pbkdfHash1;
let pbkdfHash2;
let pbkdfHash3;
const key1 = 'my secret key';
const key2 = 'my other secret key';
const salt = 'my salt';
crypto.scrypt(key1, salt, 16, hash => scryptHash1 = hash);
crypto.scrypt(key1, salt, 16, hash => scryptHash2 = hash);
crypto.scrypt(key2, salt, 16, hash => scryptHash3 = hash);
scryptHash1.toString() === scryptHash2.toString(); // true
scryptHash1.toString() === scryptHash3.toString(); // false
crypto.pbkdf2(key1, salt, 16, 16, …Run Code Online (Sandbox Code Playgroud) scrypt ×11
cryptography ×4
node.js ×4
go ×2
macos ×2
npm ×2
security ×2
blockchain ×1
encryption ×1
hmac ×1
javascript ×1
libsodium ×1
md5 ×1
node-gyp ×1
pbkdf2 ×1
ruby ×1
sha256 ×1