Go - 如何从PublicKey生成一个SSH公共密钥指纹,PublicKey的类型可能是[rsa dsa ssh-rsa ssh-dss ecdsa]

问题描述:

我只有一个PublicKey字符串,如何获得PublicKey指纹? 我从https://go-review.googlesource.com/c/crypto/+/32814得到了一些想法,但是我不知道如何用
实现ssh.PublicKey接口。Go - 如何从PublicKey生成一个SSH公共密钥指纹,PublicKey的类型可能是[rsa dsa ssh-rsa ssh-dss ecdsa]

+1

公钥没有单个指纹。指纹只是公钥的哈希值,您可以*选择任何哈希算法。 Go标准库已经在相应的crypto/*软件包中为常用密钥类型提供了公钥实现。我怀疑你必须实现你自己的。 – Peter

你可能想使用ssh.ParseAuthorizedKey从SSH软件包加载项:

https://godoc.org/golang.org/x/crypto/ssh#ParseAuthorizedKey

这会给你,你可以为了得到调用ssh.FingerprintLegacyMD5上的公钥指纹(假设你想要的是md5)。

https://godoc.org/golang.org/x/crypto/ssh#FingerprintLegacyMD5 https://godoc.org/golang.org/x/crypto/ssh#FingerprintSHA256

func main() { 
    // Read a key from a file in authorized keys file line format 
    // This could be an rsa.pub file or a line from authorized_keys 
    pubKeyBytes := []byte(`ssh-rsa AAAABMYKEY...ABC [email protected]`) 

    // Parse the key, other info ignored 
    pk, _, _, _, err := ssh.ParseAuthorizedKey(pubKeyBytes) 
    if err != nil { 
     panic(err) 
    } 

    // Get the fingerprint 
    f := ssh.FingerprintLegacyMD5(pk) 

    // Print the fingerprint 
    fmt.Printf("%s\n", f) 
} 

有提供,不知道你需要哪一种两幅指纹的功能。

+0

这就是我想要的,谢谢。 – fishu