我的节点版本: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:头。根据需要编辑此代码。

09-25 17:23