2009-04-08 145 views
2

我必須在Windows服務和asp.net網站之間進行一些安全通信。在asp.net網站上,我生成一個密鑰對,將我的公鑰發送到我的Windows服務,然後從我的服務接收加密的消息並使用asp.net進行解密。asp.net生成沒有密鑰存儲的RSA公鑰對

第一個問題是這個。所以我必須使用RSAParams.Flags = CspProviderFlags.UseMachineKeyStore;這個user profile is not created in asp.net

這不適用於我的託管服務提供商,因爲我無法訪問我的機器商店。

我認爲我的解決方案是在內存中生成密鑰對並且從不使用密鑰存儲,這可能嗎?

回答

2

結帳http://www.codeproject.com/KB/security/EZRSA.aspx從文章Exerpt:

「幫助我們做什麼?周圍的Googling的位,和快速電子郵件給我們的(優秀)的Web託管服務提供商液體六,透露了原因這就隱藏在Windows crypt API的基礎上,RSACryptoServiceProvider基於Windows crypt API。基本上,爲了允許腳本加載自己的私鑰會危害Windows密鑰庫的安全性,所以所有明智的Web託管提供商都會關閉它,以免流氓腳本竊取/覆蓋託管服務提供商自己的私鑰,這使我成爲Windows crypt API中的一個主要難題,但是你去了,我想我們一直堅持下去。還有一些谷歌搜索出現了兩個基本資源:Chew Keong TAN最優秀的BigInteger類和一些LGPL'C'代碼,用於從XySSL(最初由Christopher Devine編寫)進行必要的計算和PKCS#1封裝。這些資源對我來說特別有用,因爲(a)操縱具有數百位數字的數字的能力是一個專業領域,(b)我討厭ASN.1(構建PKCS#1格式)。計算本身看似簡單。

一天或兩天的拼接和修補以及EZRSA誕生了。 EZRSA幾乎可以完成RSACryptoServiceProvider可以完成的所有工作,但完全在託管代碼中,而不使用Windows crypt API。因此,無論您的Web託管服務提供商對您施加什麼信任級別(這是我們所需的),它都可以在任何地方運行。「

希望它有幫助!