C# で RSA アルゴリズムを使用して短いメッセージを暗号化し、python スクリプトを使用してメッセージを復号化しようとしています。
C# 側で .NET クラスを使用し、Python 側でpycryptoを使用したいと考えています。両側で同じキーを使用するように管理しました (.NET は標準の PEM/DER 形式を直接サポートしていないため、これは簡単ではありませんでした)。暗号化/復号化は両側で独立して機能します。
私は C# 側で PKCS#1 パディングを使用しています (fOAEP
パラメーターをRSACryptoServiceProvider.Encrypt
to に設定しています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))
ここmodulus
でexponent
、、、、およびはd
、 .NET構造体のそれぞれのフィールドです。(私が述べたように、Pythonでこのキーを使用してメッセージを暗号化/復号化できます。また、生成されるため、キーのインポートは正しく機能していると思います...)p
q
RSAParameters
p*q
modulus