网站是这个: https://8gwifi.org/PemParserFunctions.jsp
测试公钥:
-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAxQsGcWyJ6EucBfFcAaGk
1sL8zUf0z7cy/+mwDUao97ctJiKUdViVFTx42ZMvw2MKh7XC3cyu/PbCBLQ7y2NQ
t5aRIFI/LW0wFsoUateSsUKaDRBys7DnyBrVCUFr8pN71bmHWjbYfW9iG72vqHKb
iUHpixQNyNGv7HCYAEpjOHdj+vMSHC2vISH2+ui53he8IFqiolOlD6JCaSZECkB0
Q+IYEtYRMBLcT8OiPOvQfBJijwMCbkxgocFNq4nby30tG4NyLyXBtMihn/6lDksP
KL7dLwFOF1bj/9hveAugSTE5xDE001/69oFwmx3CmDHwGqoLqmUTwwnvFwRSf3Ku
8QIDAQAB
-----END PUBLIC KEY-----
8gwifi 这个网站给出的结果是:
Algo RSA
Format X.509
ASN1 Dump
RSA Public Key [f6:05:87:84:22:36:d9:c2:ed:4d:b2:7b:d3:90:c2:c6:72:71:af:7d]
modulus:
...
它给出的公钥指纹长度是 20 字节,应该是 sha1 哈希函数。
将这个公钥获取其 hex 值:
30819f300d06092a864886f70d010101050003818d00308189028181008686980c0f5a24c4b9d43020cd2c22703ff3f450756529058b1cf88f09b8602136477198a6e2683149659bd122c33592fdb5ad47944ad1ea4d36c6b172aad6338c3bb6ac6227502d010993ac967d1aef00f0c8e038de2e4d3bc2ec368af2e9f10a6f1eda4f7262f136420c07c331b871bf139f74f3010e3c4fe57df3afb716830203010001
然后使用 https://emn178.github.io/online-tools/sha1.html 进行计算,得出的结果是:
1c59aeb6032e94a534dbb3303e7085e4a7637ed5
在本地使用 openssl 命令又得出另外的结果:
$ openssl rsa -pubin -in public_key.pem -outform DER | openssl sha1 -c
SHA1(public_key.der)= b1:c1:0e:ae:36:56:81:e9:52:d2:76:77:26:0e:a8:1b:d8:84:22:ff
所以到底哪个结果是正确的?已经反复验证过输入是一样的公钥。
1
Leon406 2023-08-01 22:21:19 +08:00
不同工具指纹算法不一样, 网站是 ssh
参考 https://stackoverflow.com/questions/51059782/how-to-calculate-fingerprint-from-ssh-rsa-public-key-in-java 实现了算法 fingerprint |
3
FaiChou OP @Leon406 好无语,每个方法都是不同的答案。本来也不在乎这个指纹,只是好奇它怎么计算的。自己验证了下,怎么都不对。
|
4
Leon406 2023-08-02 12:16:21 +08:00 1
通过 https://8gwifi.org 网站源码 ,找到加密库,最终找到指纹算法
用的旧版的 bouncycastle 库 公钥 modulus + publicExponent 进行 sha512/160 算法得到 最新版算法已改为 SHAKE-256 取前 160 位 |