在我的工作中,我们正在进行加密以保护数据,并且数据由.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中编写了这段代码,它运行得很好。我可以使用不同的实例进行加密和解密。任何帮助将不胜感激。
谢谢!
答案 0 :(得分:4)
Compact Framework不支持使用fOAEP参数的true值(至少在3.5版中)。有关参数的详细信息,请参阅http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider.encrypt.aspx。
在CF 3.5中,对fOAEP = true
的支持似乎与设备无关。相反,拒绝true
值被硬编码为加密方法中的参数验证。