Как получить отпечаток открытого ключа? - PullRequest
0 голосов
/ 24 мая 2019

В PHP у меня есть открытый ключ (уже как ресурс OpenSSL). Я хотел бы рассчитать отпечаток открытого ключа (SHA1 или другой хэш).

Как мне это сделать?

Версия PHP 7,2 или старше.

РЕДАКТИРОВАТЬ: Это не дубликат другого вопроса, потому что этот вопрос о том, как сделать это для ключа SSH с помощью команд SSH (и связанных с ними). Я хочу сделать то же самое, используя PHP и PHP-расширение openssl.

Ответы [ 2 ]

0 голосов
/ 29 мая 2019

Я сам нашел решение. Основная идея:

  1. Декодировать часть ключа в кодировке base64 в формате PEM (после удаления из нее пробелов)
  2. Хеширование получаемых двоичных данных.

В коде (PHP):

function getPublicKeyFingerprint(string $pemEncodedKey, string $hashAlgorithm = 'sha1')
{
    $keyWithoutPemWrapper = \preg_replace(
        '/^-----BEGIN (?:[A-Z]+ )?PUBLIC KEY-----([A-Za-z0-9\\/\\+\\s=]+)-----END (?:[A-Z]+ )?PUBLIC KEY-----$/ms',
        '\\1',
        $pemEncodedKey
    );
    $keyDataWithoutSpaces = \preg_replace('/\\s+/', '', $keyWithoutPemWrapper);

    $binaryKey = \base64_decode($keyDataWithoutSpaces);

    return \hash($hashAlgorithm, $binaryKey);
}
0 голосов
/ 24 мая 2019

если вам нужен хеш php имеет несколько функций хеширования:

sha1() - https://php.net/manual/en/function.sha1.php

md5() - https://www.php.net/manual/en/function.md5.php

или используйте hash(), если вам нужен более конкретный алгоритм - см. Документы

...