我想在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