Как извлечь размер ключа в NodeJS

Я пытаюсь получить размер ключа из сертификата с кодировкой PEM.

Я пытался извлечь его с помощью node-forge (https://www.npmjs.com/package/node-forge), сначала преобразовав его в поддельный сертификат, а затем попытавшись получить из него размер ключа.

Однако я не могу найти правильную информацию в сертификате подделки.

Эта информация есть в сертификате подделки под открытым ключом, и я думаю, что смогу получить информацию из модуля 'n'

   { n: BigInteger { data: [Array], t: 74, s: 0 },
     e: BigInteger { data: [Array], t: 1, s: 0 },
     encrypt: [Function],
     verify: [Function] },

Здесь массив для 'n'

   BigInteger {
     data:
      [ 108702707,
        223366147,
        1633698,
        222104385,
        2057385,
        196952745,
        204102614,
        1342314,
        215447298,
        167299729,
        234087419,
        218888278,
        143261467,
        196197892,
        83562517,
        50733325,
        114027487,
        90758946,
        9956532,
        60800276,
        8677133,
        7005374,
        254551822,
        214728639,
        42558032,
        110792918,
        136202203,
        78922972,
        40753235,
        245284543,
        194070574,
        248422593,
        5163396,
        151359098,
        77422943,
        72471134,
        181405400,
        207346591,
        185707006,
        185418315,
        263158064,
        111864582,
        186113288,
        54738616,
        138771291,
        249640899,
        232181943,
        117496275,
        231520296,
        184509360,
        179085501,
        215072100,
        85449772,
        136664237,
        71259060,
        139830485,
        264798471,
        266417322,
        142764588,
        177236257,
        17830318,
        9879037,
        168589759,
        121974085,
        54883138,
        87144585,
        7724711,
        192243183,
        194739694,
        159581652,
        122617175,
        91020203,
        117134207,
        13 ],
     t: 74,
     s: 0 },

Могу ли я получить размер ключа из этого массива? Или есть другой более простой способ получить keySize из сертификата, закодированного PEM?


person Krijn    schedule 07.08.2019    source источник


Ответы (1)


Я думаю, что приведенный ниже подход должен работать, поскольку n используется в качестве модуля для открытого и закрытого ключей, его длина в битах также является длиной ключа.

Итак, если (как вы говорите) мы можем получить размер n в битах, у нас есть длина ключа.

Открытый ключ хранится как big-integer, поэтому мы можем вызвать bitLength().

Код ниже работает для меня:

const forge = require('node-forge');
const fs = require('fs');

function getCertificatePublicKeyBitLength(pemFile) {
    const certificate = forge.pki.certificateFromPem(fs.readFileSync(pemFile));
    return certificate.publicKey.n.bitLength();
}

console.log("Bit length: ", getCertificatePublicKeyBitLength("cert.pem"));
person Terry Lennox    schedule 07.08.2019