2010-08-11 31 views
1

我需要通過客戶端進行線程狀態,但僅限於特定的獲取請求(又名鏈接)。因此,我不想將這種狀態添加到客戶端的ViewState中,使其變得混亂。該狀態需要加密。如何創建一個新的ViewState-like字典並使用machine.config中的MachineKey中的密鑰和設置對其進行加密?如果字典組件沒有公開,那麼我如何使用machine.config中的密鑰對字符串進行encrpyt/decrypt解密。我不想添加更多必須在我們的服務器場中複製以複製現有功能的配置。如何訪問.NET用於ViewState簽名和加密的底層庫

回答

0

機器密鑰配置可以通過System.Web.Configuration.MachineKeySection訪問,除了構造函數和Reset之外,它沒有公共方法。字符串的

解密是通過以下方法處理:

.method assembly hidebysig static string 
    DecryptStringWithIV(string s, 
         valuetype System.Web.Configuration.IVType ivType) cil managed 

其中要求

.method assembly hidebysig static uint8[] 
    EncryptOrDecryptData(bool fEncrypt, 
         uint8[] buf, 
         uint8[] modifier, 
         int32 start, 
         int32 length, 
         bool useValidationSymAlgo, 
         bool useLegacyMode, 
         valuetype System.Web.Configuration.IVType ivType) cil managed 

這些都是私有的;加密/解密功能不會暴露。通過構建一個HttpContext,可以通過System.Web.IHttpHandler的實現來訪問解密,但我不確定可以去哪裏調用加密功能。

+0

即使沒有自己解密,我也找不到在通用處理程序中訪問此功能的方法:請參閱:http://stackoverflow.com/questions/2722377/viewstate-in-a-ashx-handler – Cirdec 2010-08-11 16:12:56

+0

http://www.codinginstinct.com/2008/09/encrypt-cookie-using-machine-key.html – Cirdec 2010-08-11 23:35:58

+0

直接獲取這些東西的唯一方法就是通過反思。 – Cirdec 2010-09-04 03:54:12