RSA密钥导出和导入

时间:2018-02-25 02:58:03

标签: go import export rsa x509

我目前正在尝试导出我创建的密钥,而不是导入它们以使用它们。

但如果我运行我的代码,我会收到以下错误:

panic: x509: only RSA and ECDSA public keys supported

goroutine 1 [running]:
main.main()
    /path/to/project/src/main.go:19 +0x3bd

这是我目前的代码:

// Create key
key, _ := rsa.GenerateKey(rand.Reader, 2048)

// Message to encrypt
message := "hi stackoverflow"

priv := x509.MarshalPKCS1PrivateKey(key)
pub, err := x509.MarshalPKIXPublicKey(key.PublicKey)
if err != nil {
    panic(err)
}

private, err := x509.ParsePKCS1PrivateKey(priv)
if err != nil {
    panic(err)
    return
}

public, err := x509.ParsePKIXPublicKey(pub)
if err != nil {
    return
}

encrypted, err := rsa.EncryptPKCS1v15(rand.Reader, public.(*rsa.PublicKey), []byte(message))
if err != nil {
    panic(err)
}
dencrypted, err := rsa.DecryptPKCS1v15(rand.Reader, private, encrypted)
if err != nil {
    panic(err)
}
fmt.Println(string(dencrypted))

(我研究过像洞的互联网,但没有找到一些东西,也许我使用了错误的搜索词。)

1 个答案:

答案 0 :(得分:1)

当我执行此操作时,我会对MarshalPKIXPublicKey(不是ParsePKIXPublicKey的恐慌感到恐慌,正如您在上面的评论中所建议的那样。)

问题是该函数接受*rsa.PublicKey并且您正在通过普通rsa.PublicKey

这对我有用:pub, err := x509.MarshalPKIXPublicKey(&key.PublicKey)