Encryption golang rsa解密没有填充?
Golang rsa没有填充?Encryption golang rsa解密没有填充?,encryption,go,rsa,Encryption,Go,Rsa,Golang rsa没有填充? 但是openssl是可以的。 对于加密数据对接和其他语言,使用Golang加密的数据无法正常解密,但使用PHP和Openssl可以正常,后来发现Golang不支持无填充解密,似乎只有PKCS1。 Openssl增加参数-raw可以正常解密。私钥在上面,是一个加密和解密的正确值。 有人能帮我看看怎么解决吗 $ cat private.pem -----BEGIN RSA PRIVATE KEY----- MIIBOgIBAAJBANJS/xu+NtmDqob
但是openssl是可以的。 对于加密数据对接和其他语言,使用Golang加密的数据无法正常解密,但使用PHP和Openssl可以正常,后来发现Golang不支持无填充解密,似乎只有PKCS1。
Openssl增加参数-raw可以正常解密。私钥在上面,是一个加密和解密的正确值。
有人能帮我看看怎么解决吗
$ cat private.pem
-----BEGIN RSA PRIVATE KEY-----
MIIBOgIBAAJBANJS/xu+NtmDqobnhCdLjWk46aYbBk/mQrLcozAIbQLFG2mgkrxf
B5+CgtISKpKfmRfCO2NhceK+YedaMMBUxn8CAQMCQQCMN1S9KXnmV8cEmlgaMl5G
JfEZZ1mKmYHMkxd1WvNXLNuke9ntKwti8zG1lAFcOVHnm/uYsNdua+lvvQlEgBUL
AiEA/c8ezGaNUFwEAltwTEFtFItT5PyOXlWIdPAZ7j160lkCIQDUI8f/chEmLxG1
5kPcRtyJsQRdAcnQZ5QOz6S0nBnUlwIhAKk0vzLvCOA9WAGSSt2A82MHjUNTCZQ5
BaNKu/Qo/Iw7AiEAjW0v/6FgxB9hI+7X6C89sSCtk1aGiu+4Cd/DIxK74w8CIB4q
rA1k247JrqKTGlqSHVr1Ta+h3BPbwFKCi5CiDOjV
-----END RSA PRIVATE KEY-----
$ xxd data.txt
00000000: 6d4b 5dab 6d64 45e1 e4cb 0ea8 20df b724 mK].mdE..... ..$
00000010: cfe5 db3e 75c4 e80e 2337 4f08 1b36 87b4 ...>u...#7O..6..
00000020: 7550 47d4 ed60 576a a160 2d01 3cf7 4c50 uPG..`Wj.`-.<.LP
00000030: 7e44 6432 1f9d cfe2 2e9f 4f89 f815 ae01 ~Dd2......O.....
$ base64 -i data.txt
bUtdq21kReHkyw6oIN+3JM/l2z51xOgOIzdPCBs2h7R1UEfU7WBXaqFgLQE890xQfkRkMh+dz+Iun0+J+BWuAQ==
$ cat data.txt | openssl rsautl -decrypt -inkey private.pem -raw
qYnYKT2mxuXR5XB615gOenqxOnIUjWs7
$cat private.pem
-----开始RSA私钥------
MIIBOgIBAAJBANJS/xu+NtmDqobnhCdLjWk46aYbBk/mQrLcozAIbQLFG2mgkrxf
B5+CgtISKpKfmRfCO2NhceK+YEDAMBUXN8CAQMCQQCMN1S9KxNMV8CEMLGAL5G
JfEZZ1mKmYHMkxd1WvNXLNuke9ntKwti8zG1lAFcOVHnm/uYsNdua+lvvQlEgBUL
AiEA/C8Ezganufwealtftfitt5PYOXLWIDPAZ7J160LKCIQDUI8F/chEmLxG1
5KPCRTYJSQRDACNQZ5QOZ6S0NBNULWIHAK0VZLVCOA9WAGSST2A82MHJUNTCZQ5
BaNKu/Qo/Iw7AiEAjW0v/6FgxB9hI+7X6C89sSCtk1aGiu+4Cd/DIxK74w8CIB4q
rA1k247JrqKTGlqSHVr1Ta+H3BPBWFKCI5CIDIOV
-----结束RSA私钥------
$xxd data.txt
00000000:6d4b 5dab 6d64 45e1 e4cb 0ea8 20df b724 mK].mdE
00000010:cfe5 db3e 75c4 e80e 2337 4f08 1b36 87b4..>u..7O..6。。
000000 20:7550 47d4 ed60 576a a160 2d01 3cf7 4c50 uPG.`Wj.`-.使用无填充的rsa解密密文块是一个单模指数运算
c := new(big.Int).SetBytes(cipherText)
plainText := c.Exp(c, privateKey.D, privateKey.N).Bytes()
使用输入数据的完整示例如下:
如果您想要解密函数的完整版本,带有侧通道盲,并使用预计算的CRT值以获得更快的性能,您可以从crypto/rsa/rsa.go
源代码复制decrypt
函数
如果可以选择,则不应以这种方式使用rsa。对于使用这种方法的细节和缺点有很好的解释 实际上并没有回答这个问题,但我把它放在这里是为了那些希望使用rsa加密纯文本而没有填充的人
var publicKey *rsa.PublicKey
// ...
// ...
c := new(big.Int).SetBytes([]byte(text))
encryptedBytes := c.Exp(c, big.NewInt(int64(publicKey.E)), publicKey.N).Bytes()
encryptedBase64 := base64.StdEncoding.EncodeToString(encryptedBytes)
你到底想说什么请用英语让它更容易理解。我想我们应该重新回答这个问题:语言不是太好,但1)作者应该不是以英语为母语的人;2) 问题的实质是显而易见的,可以表述为“为什么Go的crypto/rsa
包只支持OAEP和PKCS#1填充方案,并且不允许在没有填充的数据上使用rsa操作?”。我认为,答案可能是由于概述的原因(基本上相当于“不要这样做”),但OP可能需要处理遗留数据/协议,并且他们的担心是有效的。@ohko,您可能希望在中提交一个bug。如果您愿意这样做,请确保1)尝试阐明为什么您需要支持无填充的RSA操作——不要只是在那里发布指向此讨论的链接;2) 请在这里发布一个链接到您将在这里提交的问题(作为评论)——以供将来参考。我怀疑这会添加到stdlib中,因为它的用法相当可疑。如果重新打开,我现在可以发布一个答案,因为这只需要一个模指数运算。如果想要完全盲取和使用预计算的CRT值,可以从标准库中复制整个函数。非常感谢!完成!