V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
FaiChou
V2EX  ›  程序员

这个网站计算的公钥指纹是不是有问题?

  •  
  •   FaiChou ·
    FaiChou · 271 天前 · 1290 次点击
    这是一个创建于 271 天前的主题,其中的信息可能已经有所发展或是发生改变。

    网站是这个: 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
    

    hex sha1

    在本地使用 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
    

    openssl calculate der sha1

    所以到底哪个结果是正确的?已经反复验证过输入是一样的公钥。

    4 条回复    2023-08-02 12:16:21 +08:00
    Leon406
        1
    Leon406  
       270 天前
    不同工具指纹算法不一样, 网站是 ssh
    参考 https://stackoverflow.com/questions/51059782/how-to-calculate-fingerprint-from-ssh-rsa-public-key-in-java

    实现了算法 fingerprint
    Leon406
        2
    Leon406  
       270 天前
    @Leon406 #1 只看了第一位,好也不对
    FaiChou
        3
    FaiChou  
    OP
       270 天前 via iPhone
    @Leon406 好无语,每个方法都是不同的答案。本来也不在乎这个指纹,只是好奇它怎么计算的。自己验证了下,怎么都不对。
    Leon406
        4
    Leon406  
       270 天前   ❤️ 1
    通过 https://8gwifi.org 网站源码 ,找到加密库,最终找到指纹算法
    用的旧版的 bouncycastle 库
    公钥 modulus + publicExponent 进行 sha512/160 算法得到


    最新版算法已改为 SHAKE-256 取前 160 位
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   我们的愿景   ·   实用小工具   ·   3245 人在线   最高记录 6543   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 27ms · UTC 12:07 · PVG 20:07 · LAX 05:07 · JFK 08:07
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.