3

C# で RSA アルゴリズムを使用して短いメッセージを暗号化し、python スクリプトを使用してメッセージを復号化しようとしています。

C# 側で .NET クラスを使用し、Python 側でpycryptoを使用したいと考えています。両側で同じキーを使用するように管理しました (.NET は標準の PEM/DER 形式を直接サポートしていないため、これは簡単ではありませんでした)。暗号化/復号化は両側で独立して機能します。

私は C# 側で PKCS#1 パディングを使用しています (fOAEPパラメーターをRSACryptoServiceProvider.Encryptto に設定していますfalse)。そのため、Python でブロックを復号化した後、ある種のクリア テキスト (つまり、私の「メッセージ」とパディング バイト) が表示されるはずです。 )

しかし、私が見るのはゴミだけです:(。

どちらの側にも気づいていない警告/落とし穴はありますか? 私はちょっとアイデアがありません...

Thx マーティン

サンプルコード

C# / 暗号化

Console.Write("Input string:");
var s = Console.ReadLine();
var b = Encoding.Default.GetBytes(s);
var encrypted = rsa.Encrypt(b, false);
using (var file = new FileStream(filename, FileMode.Create)) {
  file.Write(encrypted, 0, encrypted.Length);
  file.Flush();
  file.Close();
}

Python / 復号化

f = open(filename, "rb")
msg = f.read()
f.close()
decrypted = rsa.decrypt(msg)
print "Decrypted message:"
print_hex(decrypted)

キー転送については、 のToXmlString()方法を使用していRSACryptoServiceProviderます。結果の XML は python で解析され、pycrypto -RSA オブジェクトは次のように初期化されます。

r = Crypto.PublicKey.RSA.construct((modulus, exponent, d, p, q))

ここmodulusexponent、、、、およびはd、 .NET構造体のそれぞれのフィールドです。(私が述べたように、Pythonでこのキーを使用してメッセージを暗号化/復号化できます。また、生成されるため、キーのインポートは正しく機能していると思います...)pqRSAParametersp*qmodulus

4

1 に答える 1

2

OK、それは私のせいでした。結果を見ていませんでした: (PKCS#1 パディングによる) 先頭のゼロは、(16 進数で) 次のように見える python 結果文字列の一部ではありません:

02 a2 16 4e 51 45 aa 8d 
94 b0 de 64 4d 4c 4c bd 
0b 01 b8 d2 de dc ed 23 
0b 25 c2 11 6c 0a 0b 1f 
4f 19 d0 33 18 db e0 81 
25 33 f6 e3 70 8d 97 d2 
c7 ef 32 ef 27 3c c0 ac 
47 68 c0 5b 7b 6d 0d ba 
44 da cb bf e8 71 75 d3 
2f 9a b1 97 6b 70 4f ff 
98 6f 5a 9a 74 3c 65 94 
eb 57 52 8a 2f 73 1f 14 
7d 76 08 d3 e5 8b 82 b8 
5d ed 2b 75 52 29 b5 22 
af 76 55 bc 5d e9 41 99 
00 4d 61 72 74 69 6e 

したがって、02最初はランダムなパディングを指しています(どういうわけか、0xffのパディングを期待していました...)。最後の 6 バイト (ゼロの後) はまさに私が期待していた「メッセージ」ですが、通常printはゼロ バイトのためにそれらを表示しませんでした...

于 2011-02-25T12:24:57.817 に答える