OpenCrypto.getFingerprint
экспортирует открытый ключ c RSA в формате X509 DER и создает га sh для этих данных. То же самое относится и к закрытому ключу RSA с той разницей, что закрытый ключ экспортируется в формате DER Pkcs8. Дайджест может быть указан в параметрах (по умолчанию: SHA 512), а также в том, возвращаются ли данные в виде буфера или в виде шестнадцатеричной строки (по умолчанию: шестнадцатеричная строка).
В коде NodeJS ключи могут быть сгенерированы с помощью crypto.generateKeyPair
, при этом формат ключа можно указать явно. Если ключи еще не в соответствующих форматах (X509 DER и Pkcs8 DER), можно выполнить преобразования ключей для получения тех же отпечатков пальцев, которые создает OpenCrypto.getFingerprint
. Подходящими функциями для этих операций являются crypto.createPublicKey
или crypto.createPrivateKey
. Наконец, ha sh должен быть сгенерирован с помощью crypto.createHash
.
Обновление:
Отпечаток пальца - не что иное, как ха * Значение 1058 *, например, с дайджестом SHA-512 (как в OpenCrypto.getFingerprint
):
var fingerprint = crypto.createHash('sha512').update(key).digest('hex'); // Fingerprint (hash) as hexadecimal string
, где ключ является публичным c или закрытым ключом в любом формате (string
, Buffer
, ... ). Если ключ указан как X509 DER (публичный c) или как PKCS8 DER (частный), то отпечаток соответствует , а OpenCrypto.getFingerprint
.
Если ключ находится в другом формат, отпечаток также может быть определен таким образом. Однако, если отпечаток должен соответствовать значению, предоставленному OpenCrypto.getFingerprint
, ключ, конечно, должен быть преобразован в форматы, используемые OpenCrypto.getFingerprint
до того, как будет сгенерирован ha sh. Это преобразование не очень сложное, например, преобразование открытого ключа PEM c PKCS1 (publicKey
) в ключ DER X509 (publicKeyDER
), включая генерацию ha sh:
var publicKeyDER = crypto.createPublicKey(publicKey, { type: 'pkcs1', format: 'pem' }).export({ type: 'spki', format: 'der' }); // Convert a public PKCS1 PEM key into a X509 DER key
var fingerprint = crypto.createHash('sha512').update(publicKeyDER).digest('hex'); // Fingerprint (hash) as hexadecimal string
Суть в том, что это функционально те же самые операции, которые выполняются в OpenCrypto.getFingerprint
. Насколько мне известно, в модуле NodeJS crypto
нет аналога OpenCrypto.getFingerprint
. Но с минимальными усилиями вы можете написать свою собственную функцию, используя перечисленные выше функции crypto
.