2016-11-29 35 views
-3

Golang rsa没有NO_PADDING?
但openssl是好的。 对于加密数据对接等语言,加密的数据与Golang无法正常解密,但使用PHP和Openssl可以正常使用,后来发现像Golang不支持NO_PADDING解密,似乎只有PKCS1。
Openssl增加参数 - raw可以正常解密。私钥在上面,是一个密码和解密正确的值。
有人可以帮我看看如何解决?golang rsa解密没有填充?

$ 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 
+1

你说的是什么意思..请使用英语使其更容易理解。 – Brij

+1

我认为我们应该重新打开这个问题:语言不太好,但1)作者应该不是母语; 2)问题的本质是可以辨别的,可以表述为“为什么go的'crypto/rsa'包仅支持OAEP和PKCS#1填充方案,并且不允许在没有填充的情况下对数据使用RSA操作?”。我认为,答案可能是由[这里]概述的原因(http://crypto.stackexchange.com/a/15184)(基本上相当于“不要那么做”),但OP仍然可能需要处理遗留数据/协议,他们的担忧是有效的。 – kostix

+0

@ohko,你可能想在[项目的bugtracker](https://github.com/golang/go/issues)中提交一个bug。如果你这样做,请确保:1)尝试制定为什么你需要RSA操作的支持,而不需要填充 - 不要只是在那里张贴一个链接到这个讨论; 2)请发布您在此提交的问题的链接(作为评论) - 以供将来参考。 – kostix

回答

2

使用rsa解密密文块不带填充是单模指数操作。

c := new(big.Int).SetBytes(cipherText) 
plainText := c.Exp(c, privateKey.D, privateKey.N).Bytes() 

使用输入数据完整的例子是在这里:https://play.golang.org/p/CgLYgLR61t

如果你想有一个完整版本的解密功能的,带侧通道致盲,并使用预先计算的CRT值更快的性能,您可以复制来自crypto/rsa/rsa.go源的decrypt函数。

如果您有选择,您不应该以这种方式使用rsa。有一个很好的discussion on the Crypto StackExchange site解释了使用这种方法的细节和缺点。

+0

非常感谢!完成! – ohko