我的节点版本:v10.15.3
我尝试使用类似crypto.privateDecrypt(privateKey, Buffer.from(encryptData, 'utf8'))
的api
我得到一个错误:Error: error:06065064:digital envelope routines:EVP_DecryptFinal_ex:bad decrypt
我知道我们可以传递类似于{key:privateKey, passphrase: 'im_passphrase'}
的密码短语,但我想检测此私钥是否具有密码短语。
知道吗?
最佳答案
似乎这在本机crypto
模块中是无法实现的。但在证券交易中。您可以检查读取文件,这可以通过文件系统(fs)模块实现。
const fs = require('fs');
const get_line = (filename, line_no, callback) => {
const stream = fs.createReadStream(filename, {
flags: 'r',
encoding: 'utf-8',
fd: null,
mode: 0666,
bufferSize: 64 * 1024
});
let fileData = '';
stream.on('data', (data) => {
fileData += data;
// The next lines should be improved
let lines = fileData.split("\n");
if(lines.length >= +line_no){
stream.destroy();
callback(null, lines[+line_no]);
}
});
stream.on('error', () => {
callback('Error', null);
});
stream.on('end', () => {
callback('File end reached without finding line', null);
});
}
const hasPassphrase = (keyFile, callback) => {
get_line(keyFile, 1, (err, line) => {
if (line.indexOf("Proc-Type:") === -1) {
callback(false);
} else {
callback(true);
}
})
}
hasPassphrase('./ssh-Key', hasPasspharse => {
// your logic here
});
你的想法是正确的,提取文件的第二行并检查是否有
Proc-Type:
头。根据需要编辑此代码。