Go语言 如何验证公钥与私钥签名是否匹配?

qojgxg4l  于 2022-12-07  发布在  Go
关注(0)|答案(2)|浏览(265)

如何验证公钥与私钥是否匹配?
在应用程序启动时,从base64 PEM编码字符串加载2048位RSA密钥。我希望在继续之前验证密钥是否有效以及它们是否匹配。签名和验证由我正在使用的下划线库完成。
我可以签署和验证虚拟数据,但我正在寻找替代解决方案。
初级运动场:https://play.golang.org/p/tsB8Yp-xs47

wgxvkvu9

wgxvkvu91#

解决方法很简单

func verifyKeyPair(private, public string) bool {
    // Handle errors here
    block, _ := pem.Decode([]byte(rsaPrivateKey))
    key, _ := x509.ParsePKCS1PrivateKey(block.Bytes)
    pubBlock, _ := pem.Decode([]byte(rsaPublicKey))
    pubKey, _ := x509.ParsePKIXPublicKey(pubBlock.Bytes)
    return key.PublicKey.Equal(pubKey)
}

https://play.golang.org/p/tR6Ns0wDrlN

yws3nbqq

yws3nbqq2#

或者,如果您希望处理其他支持的算法:

// KeysMatch generic check if public key is the same.
func KeysMatch(priv crypto.PrivateKey, pub crypto.PublicKey) bool {

    privkey, ok := priv.(interface {
        Public() crypto.PublicKey
    })

    if !ok {
        return false
    }

    pubkey, ok := privkey.Public().(interface {
        Equal(crypto.PublicKey) bool
    })

    if !ok {
        return false
    }

    return pubkey.Equal(pub)
}

相关问题