在PHP中,我有一个公共密钥(已经作为OpenSSL资源)。我想计算公钥指纹(SHA1或其他哈希)。
我该怎么做?
PHP版本为7.2或更早版本。
编辑:这不是另一个问题的重复,因为该问题与使用SSH(及相关)命令的SSH密钥有关。我想使用PHP和PHP扩展名openssl
做同样的事情。
答案 0 :(得分:0)
如果您需要哈希php,可以使用多种哈希函数:
sha1()
-https://php.net/manual/en/function.sha1.php
md5()
-https://www.php.net/manual/en/function.md5.php
或如果需要更具体的算法,请使用hash()
-see the docs
答案 1 :(得分:0)
我自己找到了解决方案。基本思路:
在代码(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);
}