2016-11-29 1 views
-3

У Golang rsa нет NO_PADDING?
Но openssl в порядке. Для шифрования данных и другого языка зашифрованные данные с помощью Golang не могут быть дешифрованы нормально, но использование PHP и Openssl может быть нормальным, а позже найдено, как Golang не поддерживает расшифровку NO_PADDING, похоже, только PKCS1.
Openssl увеличивает параметр - raw может нормальное дешифрование. Закрытый ключ выше, шифр и дешифрованное правильное значение.
Может кто-нибудь помочь мне взглянуть на то, как решить?golang rsa decrypt no padding?

$ 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) суть вопроса заметна и может быть сформулирована так: «Почему пакет' crypto/rsa' Go поддерживает только схемы дополнений OAEP и PKCS # 1 и не позволяет использовать операции RSA для данных без заполнения? ». Ответ, я думаю, может быть вызван причинами, изложенными здесь (http://crypto.stackexchange.com/a/15184) (что в основном означает «НЕ ДЕЛАЙТЕ ЭТО»), но, возможно, для обработки устаревших данных/протокола и их актуальности. – kostix

+0

@ohko, возможно, вы захотите записать ошибку в [bugtracker] проекта (https://github.com/golang/go/issues). Если вы это сделаете, убедитесь, что 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

Если вы хотите полную версию функции дешифрования, с боковым каналом ослепления и использования предвычисленных значений ЭЛТЫ для повышения производительности, можно скопировать функция decrypt от источника crypto/rsa/rsa.go.

Если у вас есть выбор, вы не должны использовать rsa таким образом. Существует хороший discussion on the Crypto StackExchange site, объясняющий детали и недостатки использования этого метода.

+0

Большое спасибо! Готово! – ohko