我想在C#中使用RSA算法加密短消息,並使用python skript解密消息。.NET中的RSA加密,python中的解密
我想在C#端使用.NET類,在Python端使用pycrypto。我管理雙方都使用相同的密鑰(由於.NET不直接支持標準的PEM/DER格式,所以它不是微不足道的)。加密/解密獨立工作在雙方。
我使用PKCS#1填充在C#側(設置的RSACryptoServiceProvider.Encrypt
到false
的fOAEP
參數),所以我期望在Python解密塊後,我應該看到某種明文(即我「消息」與填充字節一起)
但我看到的是垃圾:(。
是否有什麼注意事項/陷阱,我不知道的任何一方?我有點出出主意。 ..
Thx Martin
示例代碼
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)
對於重點轉移我使用的RSACryptoServiceProvider
的ToXmlString()
方法。將得到的XML被解析蟒和pycrypto -RSA對象與
r = Crypto.PublicKey.RSA.construct((modulus, exponent, d, p, q))
modulus
其中,exponent
,d
,p
和q
是.NET- RSAParameters
結構的相應字段進行初始化。 (正如我所說,我可以加密/解密使用蟒蛇此密鑰的消息,也p*q
產生modulus
,所以我認爲主要進口工作正常...)
我在Java和C#之間有同樣的問題。主要問題是兩種語言的編碼不同,所以string.getbytes必須使用相同的編碼處理! – Victor 2011-02-25 11:40:02
目前,我只使用ASCII字符。在C#中,我已經驗證輸入'byte []'參數爲'encrypt()',這沒問題。 Python使用8位字符串(至少在2.7版本中),我在字節級查看結果,所以我不認爲這是一個編碼問題。不管怎麼說,還是要謝謝你! – MartinStettner 2011-02-25 11:44:45
你能發表一些你的加密/解密代碼片段嗎? – Jcs 2011-02-25 11:48:42