嗨,我有一台运行Crypto的服务器,它工作正常。我使用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-我加密了
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
答案 0 :(得分:2)
当Electron支持的Node版本早于本地Node安装时,在使用Electron时未定义Node函数或不使用特定参数,即使它在本地Node安装中工作正常也可能发生。
一个好的开始是查看有问题的函数何时添加到Node。您可以通过查看Node.js documentation来做到这一点。您会在下拉菜单块的功能名称下方找到一个“历史记录”表。
在这里我们看到在节点10.5.0中添加了scryptSync
。
如果您不知道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' }
我们看到电子3使用节点10.2.0。因此,尚未实现Electron使用scryptSync
的节点,因此undefined
。
如果已经发布了支持所需节点版本的较新电子版本,则可以解决此问题。
您可以在Electron release notes中查找它。到目前为止,Node版本的升级是在主要版本中实现的,因此查看下一个x.0.0版本是一个好的开始。
在这种情况下,我们很幸运:电子4支持实现scryptSync
的节点10.11.0。
因此,升级到最新的Electron版本应该可以解决此问题。
答案 1 :(得分:0)
我认为,要使nodejs模块在电子环境中工作,您不仅需要设置更多的功能,例如您正在使用node中的库。
该链接似乎为您提供了在电子中使用NPM / nodejs模块所需的信息: