嗨,所以我有一个服务器运行加密它完美的工作。Im使用electronjs作为客户端,并且加密应该被构建到节点中。当我尝试使用该模块时,它返回"crypto.scryptSync不是一个函数“
我有过
let crypto = require('crypto');在页面的顶部
我正在做一个简单的调用,如下所示
Encrypt_AES
function Encrypt_AES(data, pubkey) {
const algorithm = 'aes-192-cbc';
const key = crypto.scryptSync(pubkey, 'salt', 24);
const iv = Buffer.alloc(16, 0); // Initialization vector.
const cipher = crypto.createCipheriv(algorithm, key, iv);
let encrypted = cipher.update(JSON.stringify(data), 'utf8', 'hex');
encrypted += cipher.final('hex');
return encrypted;
}Decrypt_AES
function Decrypt_AES(data, pubkey) {
const algorithm = 'aes-192-cbc';
const key = crypto.scryptSync(pubkey, 'salt', 24);
const iv = Buffer.alloc(16, 0); // Initialization vector.
const decipher = crypto.createDecipheriv(algorithm, key, iv);
let decrypted = decipher.update(data, 'hex', 'utf8');
decrypted += decipher.final('utf8');
return JSON.parse(decrypted);
}我不明白为什么它不能拿起电子模块,我从来没有遇到过其他模块的这个问题。
我试过npm -i加密
npm WARN deprecated crypto@1.0.1: This package is no longer supported. It's now a built-in Node module. If you've depended on crypto, you should switch to the one that's built-in. npm notice created a lockfile as package-lock.json. You should commit this file. + crypto@1.0.1 added 1 package and audited 724 packages in 4.95s found 0 vulnerabilities
发布于 2019-02-20 18:53:05
问题所在
当Electron支持的Node版本比本地Node安装的版本旧时,可能会发生这样的情况:使用Electron时没有定义Node函数,或者即使它与您的本地Node安装配合良好,也不接受特定的参数。
找出您使用的版本
一个不错的开始是查看有问题的函数何时被添加到Node。您可以通过查看Node.js documentation来做到这一点。在下拉框中,您将在函数名称的正下方找到一个History表。

在这里我们可以看到,scryptSync是在节点10.5.0中添加的。
如果您不知道您的Electron安装支持哪个Node版本,您可以使用Electron运行以下命令:
console.log(process.versions)
您应该可以在输出中找到已使用的Node版本。例如,对于Electron 3.1.4,它应该是这样的:
{ http_parser: '2.8.0',
node: '10.2.0',
v8: '6.6.346.32',
uv: '1.20.3',
zlib: '1.2.11',
ares: '1.14.0',
modules: '64',
nghttp2: '1.29.0',
napi: '3',
openssl: '1.1.0h',
electron: '3.1.4',
chrome: '66.0.3359.181' }为了进行比较,下面是我的Electron 4.0.2安装的输出:
{ http_parser: '2.8.0',
node: '10.11.0',
v8: '6.9.427.24-electron.0',
uv: '1.23.0',
zlib: '1.2.11',
ares: '1.14.0',
modules: '64',
nghttp2: '1.33.0',
napi: '3',
openssl: '1.1.0',
electron: '4.0.2',
chrome: '69.0.3497.106',
icu: '62.1',
unicode: '11.0',
cldr: '33.1',
tz: '2018e' }如我们所见,Electron3使用Node10.2.0。因此,在电子使用的节点中,scryptSync尚未实现,因此是undefined。
如何解决这个问题?
如果已经发布了支持您需要的Node版本的较新的Electron版本,则可以解决此问题。
您可以在Electron release notes中查找此内容。到目前为止,Node版本升级是在主要版本中实现的,所以看看下一个x.0.0版本是一个很好的开始。
在这种情况下,我们很幸运:Electron4支持Node10.11.0,它实现了scryptSync。

所以升级到最新的Electron版本应该可以解决这个问题。
发布于 2019-02-18 06:29:23
我认为要让nodejs模块在电子中工作,你需要设置的不仅仅是requiring in,就像你在node中使用的库一样。
此链接为您提供了在电子邮件中使用NPM/nodejs模块所需的信息:
https://stackoverflow.com/questions/54738225
复制相似问题