2016-11-29 19 views
-3

Golang rsaにNO_PADDINGがありませんか?
しかし、opensslは問題ありません。暗号化されたデータドッキングやその他の言語では、Golangで暗号化されたデータは正常に復号化できませんが、PHPとOpensslの使用は正常であり、GolangはNO_PADDING復号化をサポートしていないのが現状です。
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)(これは基本的に「DO NOT DO THAT」に相当する)に概説されている理由によると思われますが、依然としてOPが必要になる可能性がありますレガシーデータ/プロトコルを扱うことができ、その懸念事項は有効です。 – kostix

+0

@ohko、[プロジェクトのバグトラッカー](https://github.com/golang/go/issues)にバグを報告したいかもしれません。これを行う場合は、必ず1)パディングなしのRSA操作のサポートが必要な理由を定式化してください。このディスカッションへのリンクを投稿するだけではありません。 2)今後の参考のため、ここに提出する問題へのリンクを(コメントとして)投稿してください。 – kostix

答えて

2

パディングなしのrsaを使用して暗号文ブロックを復号することは、1つのモジュロ指数演算です。

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

ご入力されたデータを使用して完全な例はここにある:あなたはサイドチャネルは、まばゆいばかりと高速なパフォーマンスのために、事前に計算CRT値を使用したと復号機能のフルバージョンを、必要な場合https://play.golang.org/p/CgLYgLR61t

、あなたがコピーすることができますソースcrypto/rsa/rsa.godecryptの機能です。

あなたが選択すれば、このようにrsaを使用すべきではありません。この方法を使用することの詳細と欠点を説明する良いdiscussion on the Crypto StackExchange siteがあります。

+0

ありがとう!完了! – ohko

関連する問題