2011-05-27 32 views
3

在我的工作中,我們正在進行加密以保護數據,並且數據由.NET Compact Framework加密,並且必須由常規.NET框架讀取一臺服務器。我們遇到了一個問題,即緊湊框架無法使用已知公鑰使用RSA加密(拋出異常)。服務器將公鑰傳遞給緊湊框架設備。下面是一個爲緊湊框架編寫的測試應用程序來展示問題。.NET Compact Framework中的RSA RSACryptoServiceProvider使用完整的.NET Framework中的公鑰

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); 

這段代碼產生當「加密」方法被調用以下異常:

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

你不加密()與公鑰,你Sign()。我猜這是問題所在。 – 2011-05-27 13:04:32

+3

@亨克:其實,你是用公鑰加密的。您使用私鑰簽名。 (關鍵在於只有私鑰的持有者才能讀取加密數據,但任何人都可以驗證簽名。) – 2011-05-27 13:10:01

+0

@ Nicole:你是對的,我是在讀睡覺。 – 2011-05-27 14:49:24

回答

4

精簡版框架(至少在版本3.5中)不支持fOAEP參數使用真值。有關參數的詳細信息,請參見http://msdn.microsoft.com/en-us/library/system.security.cryptography.rsacryptoserviceprovider.encrypt.aspx

在CF 3.5中,支持fOAEP = true似乎不依賴於設備。相反,在加密方法中,拒絕true值被硬編碼爲參數驗證。

+0

非常感謝。我希望點擊綠色的複選框可以讓你回答這個問題。謝謝! – 2011-05-28 00:05:52