英文:
Error parsing RSA public key
问题
我正在尝试使用以下代码从文件中读取RSA公钥:
keyBytes, err := ioutil.ReadFile("pubkey.pem")
if err != nil {
log.Fatal(err)
}
block, _ := pem.Decode(keyBytes)
fmt.Printf("block.Type: %s\n", block.Type)
pubkeyInterface, err := x509.ParsePKIXPublicKey(block.Bytes)
pubkey, ok := pubkeyInterface.(*rsa.PublicKey)
if !ok {
log.Fatal("Fatal error")
}
cipher, err := rsa.EncryptPKCS1v15(nil, pubkey, []byte(msg))
if err != nil {
log.Fatal(err)
}
但是我得到了以下错误:
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x20 pc=0x463921]
goroutine 1 [running]:
io.ReadAtLeast(0x0, 0x0, 0xc200089002, 0x70, 0x7e, ...)
/usr/lib/go/src/pkg/io/io.go:284 +0xf1
io.ReadFull(0x0, 0x0, 0xc200089002, 0x70, 0x7e, ...)
/usr/lib/go/src/pkg/io/io.go:302 +0x6f
crypto/rsa.nonZeroRandomBytes(0xc200089002, 0x70, 0x7e, 0x0, 0x0, ...)
/usr/lib/go/src/pkg/crypto/rsa/pkcs1v15.go:134 +0x70
crypto/rsa.EncryptPKCS1v15(0x0, 0x0, 0xc20004c550, 0xc20004c560, 0xd, ...)
/usr/lib/go/src/pkg/crypto/rsa/pkcs1v15.go:35 +0x236
main.encode(0x536630, 0xd, 0x535ad0, 0x9, 0x54f1b0, ...)
/home/taot/programming/go/encrypt/read_cert.go:28 +0x355
main.main()
/home/taot/programming/go/encrypt/read_cert.go:12 +0x32
goroutine 2 [syscall]:
goroutine 3 [runnable]:
似乎我的类型断言将interface{}转换为*rsa.PublicKey时出了问题,但我没有得到编译错误。
正确的做法是什么?提前感谢!
谢谢,
Terry
英文:
I'm trying to read an RSA public key from file with the following code:
keyBytes, err := ioutil.ReadFile("pubkey.pem")
if err != nil {
log.Fatal(err)
}
block, _ := pem.Decode(keyBytes)
fmt.Printf("block.Type: %s\n", block.Type)
pubkeyInterface, err := x509.ParsePKIXPublicKey(block.Bytes)
pubkey, ok := pubkeyInterface.(*rsa.PublicKey)
if !ok {
log.Fatal("Fatal error")
}
cipher, err := rsa.EncryptPKCS1v15(nil, pubkey, []byte(msg))
if err != nil {
log.Fatal(err)
}
But I got the following error:
panic: runtime error: invalid memory address or nil pointer dereference
[signal 0xb code=0x1 addr=0x20 pc=0x463921]
goroutine 1 [running]:
io.ReadAtLeast(0x0, 0x0, 0xc200089002, 0x70, 0x7e, ...)
/usr/lib/go/src/pkg/io/io.go:284 +0xf1
io.ReadFull(0x0, 0x0, 0xc200089002, 0x70, 0x7e, ...)
/usr/lib/go/src/pkg/io/io.go:302 +0x6f
crypto/rsa.nonZeroRandomBytes(0xc200089002, 0x70, 0x7e, 0x0, 0x0, ...)
/usr/lib/go/src/pkg/crypto/rsa/pkcs1v15.go:134 +0x70
crypto/rsa.EncryptPKCS1v15(0x0, 0x0, 0xc20004c550, 0xc20004c560, 0xd, ...)
/usr/lib/go/src/pkg/crypto/rsa/pkcs1v15.go:35 +0x236
main.encode(0x536630, 0xd, 0x535ad0, 0x9, 0x54f1b0, ...)
/home/taot/programming/go/encrypt/read_cert.go:28 +0x355
main.main()
/home/taot/programming/go/encrypt/read_cert.go:12 +0x32
goroutine 2 [syscall]:
goroutine 3 [runnable]:
Seems something is wrong with my type assertion converting interface{} to *rsa.PublicKey, but I didn't get a compile error.
What's the correct way of doing this? Thanks in advance!
Regards,
Terry
答案1
得分: 5
错误是因为您将nil传递给rsa.EncryptPKCS1v15。作为第一个参数,它需要一个io.Reader来读取随机字节。您可以使用crypto/rand包中的rand.Reader,例如。
英文:
The error is because you're passing nil to rsa.EncryptPKCS1v15. As the first parameter it needs an io.Reader from which to read random bytes. You can use, for example, rand.Reader from package crypto/rand.
通过集体智慧和协作来改善编程学习和解决问题的方式。致力于成为全球开发者共同参与的知识库,让每个人都能够通过互相帮助和分享经验来进步。


评论