作者热门文章
- Java 双重比较
- java - 比较器与 Apache BeanComparator
- Objective-C 完成 block 导致额外的方法调用?
- database - RESTful URI 是否应该公开数据库主键?
我的 Node 版本: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
模块实现。但截至目前 question在证券交易所。您可以检查读取文件,这可以通过文件系统 (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:
header 。根据您的需要编辑此代码。
关于node.js - 如何检测RSA私钥在 Node 中有密码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/55528574/
我是一名优秀的程序员,十分优秀!