我正在尝试使用 C# 中的 RSA 算法加密一条短消息,并使用 python 脚本解密该消息。
我想在 C# 端使用 .NET 类,在 python 端使用pycrypto。我已经管理双方使用相同的密钥(这甚至不是微不足道的,因为 .NET 不直接支持标准 PEM/DER 格式)。加密/解密在双方独立工作。
我在 C# 端使用 PKCS#1 填充(将fOAEP
参数设置为RSACryptoServiceProvider.Encrypt
to false
),所以我希望在 python 中解密块后,我应该看到某种明文(即我的“消息”和填充字节)
但我看到的都是垃圾:(。
是否有任何我不知道的警告/陷阱?我有点没主意了...
谢谢马丁
示例代码
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结构p
的各个字段。(正如我所提到的,我可以在 python 中使用这个密钥加密/解密消息,也可以产生,所以我认为密钥导入工作正常......)q
RSAParameters
p*q
modulus