.net - .NET 中的 RSA 加密,python 中的解密

标签 .net python rsa public-key-encryption pycrypto

我正在尝试在 C# 中使用 RSA 算法加密一条短消息,并使用 python skript 解密该消息。

我想在 C# 端使用 .NET 类,pycrypto在 python 方面。我已经设法让双方都使用相同的 key (这甚至不是微不足道的,因为 .NET 不直接支持标准的 PEM/DER 格式)。加密/解密在双方独立进行。

我在 C# 端使用 PKCS#1 填充(将 RSACryptoServiceProvider.EncryptfOAEP 参数设置为 false),所以我希望在用 python 解密 block 后我应该看到某种明文(即我的“消息”和填充字节)

但我看到的都是垃圾 :(.

双方是否有任何我不知道的注意事项/陷阱?我有点没主意了......

谢谢 马丁

示例代码

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)

对于 key 传输,我使用 RSACryptoServiceProviderToXmlString() 方法。生成的 XML 在 python 中解析,pycrypto-RSA 对象用

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

其中 modulusexponentdpq 是.NET-RSAParameters 结构的各个字段。 (正如我所提到的,我可以在 python 中使用此 key 加密/解密消息,p*q 也会产生 modulus,所以我认为 key 导入工作正常...)

最佳答案

好吧,这是我的错,我只是没有看结果:前导零(来自 PKCS#1 填充)不是 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 并没有显示它们只是因为零字节......

关于.net - .NET 中的 RSA 加密,python 中的解密,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5116760/

相关文章:

c# - 检查对象是否是委托(delegate)

将控件添加到窗体时,应用程序的 C# 加载项(通过 COM)卡住?

c# - HttpContext 和 HttpRequest 之间的区别?

java - 如何在 Java 中生成 RSA key

java - 如何在 C# 中解密 JWE 源(使用 RSA1_5 A256CBC-HS512 加密)?

c# - 将单个 Func<T,bool> 与 Where() 和继承一起使用

python - 转换为日期的正确方法

python - 使用 MAPI 从 GAL 检索电子邮件列表

python - 无法让 wx.BufferedDC 绘制任何东西

c# - 是否可以确定远程 Windows 服务器上证书私钥的文件名?