无法在golang中使用公钥加密

无法在golang中使用公钥加密,go,rsa,public-key-encryption,Go,Rsa,Public Key Encryption,我正在使用golang加密库 func加密(公钥*rsa.publicKey,消息字符串)[]字节{ 消息:=[]字节(消息) println(消息,消息) 密文,错误:=rsa.EncryptPKCS1v15(rand.Reader,公钥,msg) 如果错误!=零{ println(“错误:,err.Error()) } 返回密文 } 我得到以下错误 panic:运行时错误:无效内存地址或零指针取消引用 [信号SIGSEGV:分段冲突代码=0x1 addr=0x0 pc=0x40e86d6]

我正在使用golang加密库

func加密(公钥*rsa.publicKey,消息字符串)[]字节{
消息:=[]字节(消息)
println(消息,消息)
密文,错误:=rsa.EncryptPKCS1v15(rand.Reader,公钥,msg)
如果错误!=零{
println(“错误:,err.Error())
}
返回密文
}
我得到以下错误

panic:运行时错误:无效内存地址或零指针取消引用
[信号SIGSEGV:分段冲突代码=0x1 addr=0x0 pc=0x40e86d6]

如何处理?如何使用PKCS1加密

控制台:-

Verifying local data [20/32]0xc0000d37b0
panic: runtime error: invalid memory address or nil pointer dereference
[signal SIGSEGV: segmentation violation code=0x1 addr=0x0 pc=0x40e8456]

goroutine 1 [running]:
crypto/rsa.checkPub(...)
        /usr/local/Cellar/go/1.12.5/libexec/src/crypto/rsa/rsa.go:75
crypto/rsa.EncryptPKCS1v15(0x4334500, 0xc0000a0060, 0x0, 0xc0000d37b0, 0x14, 0x20, 0x402ddb2, 0x2, 0x42df45d, 0x1c, ...)
        /usr/local/Cellar/go/1.12.5/libexec/src/crypto/rsa/pkcs1v15.go:42 +0x56
main.encrypt(0x0, 0x42dcb46, 0x14, 0x0, 0x0, 0x0)
        /Users/weri/goModules/src/EastWinds/CoreUtils.go:195 +0x129
main.main()
        /Users/weri/goModules/src/EastWinds/main.go:26 +0x11e

公钥密码:-

func importPublicKey(publicKeyString)*rsa.PublicKey{
块:=pem.Decode([]字节(publicKeyString))
如果块==nil{
归零
}
pub,err:=x509.ParsePKIXPublicKey(block.Bytes)
如果错误!=零{
println(“错误:,err.Error())
归零
}
开关pub:=pub。(类型){
案例*rsa.PublicKey:
println(pub.N)
返回酒吧
违约:
突破
}
归零
}
公钥:
-----开始RSA公钥----- MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz1Ibsf4IGAs1ymoew4hR MQUJwIGotca3kiHOeZzuzosuw58z8FFEDQt+PcxjTsx3mvo0uK04oL5CGorQZrTl JJROZJ5B2IWMHU2L1WPOKJAPBQDWU8ROIKLOBQ9ENCQMH2/yvxUIBcJ0M9e5Tky UslTmqUdZCSDljPO+u30HkBVRqs5Z/bE82BfYMKJ3oDBdWMfiM2nyxGb9ynlml5B DC3USYVIR9NE7新5Y78RU2F1/zmnPdfnOp4FgsgwLrinML7LZ+TUKT2zfwsVhJK IKL6WFWDQUSPI1O5KM3ASVGGQBYWTJ3ZPHMLCQPLEUDMF9FLYIABGBRWK 乌齐达卡布 -----结束RSA公钥-----

在您共享的链接中,您的PEM密钥字符串格式不正确,它需要与以下内容完全相同:

    const pubPEM = `
-----BEGIN RSA PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz1Ibsf4IGAs1ymoew4hR
MQUJwIGotca3kiHOeZzuzosuw58z8FFEDQt+PcxjTsx3mvo0uK04oL5CGorQZrTl
jJroZj5B2IwmHu2l1wpoKjaPbQDWu8RoIKlObaq9ENcqmH2/yvxUIBcJ0M9e5Tky
UslTmqUdZCSDljPO+u30HkBVRqs5Z/bE82BfYMKJ3oDBdWMfiM2nyxGb9ynlml5B
dC3USyVIr9NE7NEW5y78ru2F1/zmnPdfnOp4FgsgwLrinML7LZ+TUKT2zfwsVhJK
IKl6WFwDQUspi1Oo5km3AsvGtGqBynCyWtj3ZPHMlCQplEusDmF9flyiABgvBrwk
uQIDAQAB
-----END RSA PUBLIC KEY-----`
如果我从中获取示例并向其传递一个正确格式的键,它将起作用:

有关原始代码的更多说明:

  • 您只是打印错误,也应该返回并检查它们
  • 您没有检查返回的键是否为
    nil
    ,当
    block==nil
  • 您应该检查
    pem.Decode
    返回的未解析部分是否为空

请提供完整的stacktraceis
publicKey
nil?好的,我们现在有大部分产品。你能把它们组合成一个运动场吗?你的
importPublicKey
在大多数情况下返回零。如何在调用方中处理此问题?我认为我的导入公钥版本存在问题。你能看一下importPublicey吗?
    const pubPEM = `
-----BEGIN RSA PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAz1Ibsf4IGAs1ymoew4hR
MQUJwIGotca3kiHOeZzuzosuw58z8FFEDQt+PcxjTsx3mvo0uK04oL5CGorQZrTl
jJroZj5B2IwmHu2l1wpoKjaPbQDWu8RoIKlObaq9ENcqmH2/yvxUIBcJ0M9e5Tky
UslTmqUdZCSDljPO+u30HkBVRqs5Z/bE82BfYMKJ3oDBdWMfiM2nyxGb9ynlml5B
dC3USyVIr9NE7NEW5y78ru2F1/zmnPdfnOp4FgsgwLrinML7LZ+TUKT2zfwsVhJK
IKl6WFwDQUspi1Oo5km3AsvGtGqBynCyWtj3ZPHMlCQplEusDmF9flyiABgvBrwk
uQIDAQAB
-----END RSA PUBLIC KEY-----`