我编写了一个BlackBerry应用程序,RSA使用PKCS1FormatterEngine加密消息。这将输出以PKCS#1 v2.1
格式化的加密消息以下是该消息的片段:
ç½.¦B¯€ü6Áùε"aYÅÂ7;«&â/Ѥ²•¨S.°.b7<iÔ½Œ.:.Ý&D‹±ì‰8.V•.Ä$‡ZAÜ.p.Ø}åÜ.uK.Æøæ
我已经在.NET中拥有RSA私钥,但我似乎找不到解密它的方法。
我将非常感谢任何关于我应该使用的课程的想法。
答案 0 :(得分:1)
标准RSAOAEPKeyExchangeDeformatter
课程有什么问题吗?如果是,那么你应该告诉我们你的代码。
它永远存在于.NET框架中,但在Windows XP(例如Windows 2000)IIRC之前不可用 - 但今天这不应该是一个大问题。
答案 1 :(得分:1)
PKCS#1 v2.1有两种加密模式:RSAES-OAEP和RSAES-PKCS1-V1_5。
RSAES-PKCS1-V1_5也包含在该标准的早期版本中,因此它通常也称为PKCS#1 v.1.5。因此,将RSAES-OAEP称为PKCS#1 v.2.1并不罕见,但它是错误的和错误的。
在PKCS1FormatterEngine的文档中,RIM记录了它根据PKCS#1 v.2.1实施了PKCS#1,但没有解释它们是指RSAES-OAEP还是RSAES-PKCS1-V1_5。
但是,由于您报告RSACryptoServiceProvider.Decrypt(array, false);
有效,我会得出结论,他们已经实施了RSAES-PKCS1-V1_5。只需使用它:这是解密RSAES-PKCS1-V1_5的最简单方法。或者,您可以使用RSAPKCS1KeyExchangeDeformatter
。
答案 2 :(得分:0)
Bouncy Castle似乎能够使用OAA模式的RSA加密/解密。从来没有尝试过,我只使用了Bouncy的Java库。
啊,找到一个例子,看看页面底部的示例代码:
答案 3 :(得分:0)
我使用RSACryptoServiceProvider .NET类和Decrypt函数。
第一个参数是加密数据,第二个是布尔值,指定要使用的填充类型。
True = OAEP填充(PKCS#1 v2.1) False = PKCS#1 v1.5
这很奇怪,因为我的代码在将参数设置为false时起作用。我非常确定密码在PKCS#1 v2.1中,因为我使用的是BlackBerry SDK中的this类。
来自API文档的引用:
我们根据PKCS#1版本2.1文档实现了PKCS1格式化程序引擎。
无论如何,它现在对我有用。希望这有助于其他人。 :)