【问题标题】:RSA RSACryptoServiceProvider in .NET Compact Framework using public key from full .NET Framework.NET Compact Framework 中的 RSA RSACryptoServiceProvider 使用来自完整 .NET Framework 的公钥
【发布时间】:2011-05-27 12:47:21
【问题描述】:

在我的工作中,我们正在进行加密以保护数据,并且该数据由 .NET Compact Framework 加密,并且必须由服务器上的常规 .NET 框架读取。我们遇到了一个问题,即紧凑型框架无法使用具有已知公钥的 RSA 进行加密(抛出异常)。服务器将公钥传递给紧凑型框架设备。下面是一个为紧凑框架编写的测试应用程序来显示问题。

string mod = 
    "rgTcL0/ZK3j5Rt6CigEsfyLDiERh2PuVzmZVdHbb/2jQOG5JEcAqqBoscDZ4PwJR8aO19xNVTce7"
  + "vzbEued32z2PLAvCcHFKGtOgNEeZ+ZcD6uHobsKws76BdjBrI7Pigk2HSkak21n2WoVcBVHoRmcn"
  + "eX7DPaB4atamhkbLoRBF1VlautDfhX9lnOFA2zyZUCB5CproavKF6wl19pZne2Q4U1vMtBAA2Q9N"
  + "aZFsrj/KjE3UtYKvjd4Oy55Hmtpb5P3CZAVpiyCTKq3gTxDJn69giyctu428DgkKacmZ4yTvkLWB"
  + "Ym/zWtAf9o8pI+3MwgF7wzuK5ypGack3l4/Skw==";

string exp = "AQAB";

RSACryptoServiceProvider rsa = new RSACryptoServiceProvider(2048);

RSAParameters p = new RSAParameters();
p.Modulus = Convert.FromBase64String(mod);
p.Exponent = Convert.FromBase64String(exp);

rsa.ImportParameters(p);

var bytes = rsa.Encrypt(System.Text.Encoding.ASCII.GetBytes("MIKE"), true);

此代码在调用“Encrypt”方法时会产生以下异常:

Framework: 3.5.7283.0
Exception: fOAEP 
InnerException: Could not evaluate expression

Stack Trace:
   at System.Security.Cryptography.RSACryptoServiceProvider.Encrypt
    (Byte[] rgb, Boolean fOAEP)

有没有人知道我应该尝试/做的其他事情?我已经用普通的 .NET 编写了这段代码,它工作得很好。我可以使用不同的实例进行加密和解密。任何帮助将不胜感激。

谢谢!

【问题讨论】:

  • 你不用公钥加密(),你签名()。我猜这就是问题所在。
  • @Henk:实际上,您确实使用公钥进行加密。您使用私钥签名。 (关键是只有私钥的持有者可以读取加密数据,但任何人都可以验证签名。)
  • @Nicole:你说得对,我在睡觉。

标签: c# encryption compact-framework handheld


【解决方案1】:

Compact Framework 不支持对 fOAEP 参数使用真值(至少在 3.5 版中)。参数详情见http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider.encrypt.aspx

在 CF 3.5 中,对 fOAEP = true 的支持似乎与设备无关。相反,拒绝 true 值被硬编码为 Encrypt 方法中的参数验证。

【讨论】:

  • 非常感谢。我希望单击绿色复选框可以让您回答这个问题。谢谢!
猜你喜欢
  • 2020-12-09
  • 1970-01-01
  • 1970-01-01
  • 2010-12-09
  • 2010-09-28
  • 2010-10-09
  • 1970-01-01
  • 2012-01-09
  • 2012-04-06
相关资源
最近更新 更多