如何使用ECDSA字符串privateKey签名消息

时间:2018-01-23 00:21:35

标签: go ecdsa

我正在尝试使用ECDSA privateKey签名,但带有类型字符串。 问题是为了签署我需要使用ecdsa包中的“签名”方法的消息。

func (priv *PrivateKey) Sign(rand io.Reader, msg []byte, opts crypto.SignerOpts) ([]byte, error)

此方法只能采用PrivateKey类型。 如何将我的字符串私钥转换为此类型?或者另一种方法可用吗?

1 个答案:

答案 0 :(得分:1)

您可以使用标准库x509.ParseECPrivateKey解析DER编码的椭圆曲线私钥。

derKey := []byte(keyString)
privKey, err := x509.ParseECPrivateKey(derKey)
if err != nil {
  panic(err)
}
signedMsg, err := privKey.Sign(randReader, msg, otps)

如果您的密钥是PEM格式,则必须先使用pem.Decode解码:

var block *pem.Block
if block, _ = pem.Decode([]byte(keyString)); block == nil {
    panic("expected pem block")
}
privKey, err := x509.ParseECPrivateKey(block.Bytes)
// etc... the rest is the same