2016-11-29 79 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