无法在golang中使用公钥加密
我正在使用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]
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
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-----`