1 回答

TA贡献1815条经验 获得超13个赞
我们需要做的第一件事是使用标准库中的编码/asn1 包。你只需要给出正确的结构来解码。从您的链接中,我们可以看到我们有一个包含另一个带有2和一个.在前进中,这将是:SEQUENCESEQUENCEOBJECTIDENTIFIERBITSTRING
type Ids struct {
OBi1 asn1.ObjectIdentifier
OBi2 asn1.ObjectIdentifier
}
type PubKey struct {
Id Ids
Bs asn1.BitString
}
现在我们只需要将数据变成这个结构:UnMarshall
str := `3056301006072a8648ce3d020106052b8104000a034200049bb8e80670371f45508b5f8f59946a7c4dea4b3a23a036cf24c1f40993f4a1daad1716de8bd664ecb4596648d722a4685293de208c1d2da9361b9cba74c3d1ec`
bstring, err := hex.DecodeString(str)
if (err != nil) {
panic(err)
}
var decode PubKey
_, err = asn1.Unmarshal(bstring, &decode)
if (err != nil) {
panic(err)
}
fmt.Println(hex.EncodeToString(decode.Bs.Bytes))
请注意,您不必将字符串编码为十六进制并再次编码,因为Unmarshall接受字节数组
这将打印预期的结果:
049bb8e80670371f45508b5f8f59946a7c4dea4b3a23a036cf24c1f40993f4a1daad1716de8bd664ecb4596648d722a4685293de208c1d2da9361b9cba74c3d1ec
再一次,您可能不需要编码为字符串。
- 1 回答
- 0 关注
- 189 浏览
添加回答
举报