我在解析刚刚创建的rsa密钥时遇到了一些奇怪的情况。
在这部分中,我生成了新对并写入文件:
rsaKey,err:= rsa.GenerateKey(rand.Reader,2048)
if err != nil {
fmt.Println(err)
os.Exit(1)
}
publicKey := rsaKey.PublicKey
outFile, err := os.Create("./private.pem")
defer outFile.Close()
var privateKey = &pem.Block{
Type: "PRIVATE KEY",
Bytes: x509.MarshalPKCS1PrivateKey(rsaKey),
}
err = pem.Encode(outFile, privateKey)
asn1Bytes, err := asn1.Marshal(publicKey)
var pemkey = &pem.Block{
Type: "PUBLIC KEY",
Bytes: asn1Bytes,
}
pemfile, err := os.Create("./public.pem")
defer pemfile.Close()
err = pem.Encode(pemfile, pemkey)
下一步是从文件中读取密钥并解析它:
data, err := ioutil.ReadFile("./public.pem")
block, _ :=pem.Decode(data)
res,err := x509.ParsePKIXPublicKey(block.Bytes)
fmt.Print(err)
但 x509.ParsePKIXPublicKey(block.Bytes)返回错误:
asn1:结构错误:标记不匹配(16 vs {class:0 tag:2 length:257 isCompound:false}){optional:false explicit:false application:false defaultValue:tag:stringType:0 timeType: 0 set:false omitEmpty:false} AlgorithmIdentifier @ 4
游乐场示例
https://play.golang.org/p/djlK8lO5_E2
请帮我解决这个问题。