Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/go/7.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Encryption golang rsa解密没有填充?_Encryption_Go_Rsa - Fatal编程技术网

Encryption 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

Golang rsa没有填充?
但是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值,可以从标准库中复制整个函数。非常感谢!完成!