2010-06-27 138 views
0

我需要在app.config中存儲用戶名和密碼。我想用Rijndael算法加密這些值。我在哪裏存儲密鑰和IV來解密un和pw?我需要將應用程序部署到具有不同用戶的不同服務器上。Rijndael商店IV和密鑰

+0

@IUnknownPointer:真的嗎?像什麼? – 2010-06-28 11:15:51

回答

1

加密web.config或app.config文件通常使用RSA或DPAPI加密完成。

我不確定它是否適合您的情況,只有在應用程序的用戶受到限制而不是管理員的情況下才有效。

http://msdn.microsoft.com/en-us/library/ff647398.aspx

+0

DPAPI可能是不使用硬件設備即可完成的最佳選擇。 RSA不會幫忙。 – 2010-06-28 11:19:21

+0

您可以在多臺服務器上使用RSA加密,因爲該密鑰可以導出,但在我看來這不是一個好的解決方案。 – 2010-06-28 13:37:13

0

當然不會存儲在程序集中 - 一個相對簡單的IL看起來可能會放棄這個祕密。即使模糊它,也不會提供額外的安全性。

最簡單的就是在不同的服務器上本地使用OS \文件系統安全來控制對密鑰文件的讀取訪問。

0

理想情況下,無法通過網絡訪問的位置中的文本文件上,只能通過具有嚴格權限的本地文件系統訪問。

如果您需要分發應用程序,你可以使用下面的結構

  • C:\MyApp密鑰和其他私人信息
  • C:\MyApp\www虛擬目錄

這將防止窺視眼睛(或網絡服務器錯誤)訪問數據。只有物理訪問機器纔有可能揭示它,而且通常可以更好地控制。

0

如何使用機器密鑰加密辦呢?有(據我所知)沒有這樣做的簡單方法,但你可以使用反射破解你的方式進入框架。機器密鑰不是或僅部分存儲在機器上。如果將ASP.NET配置爲'爲每個應用程序生成唯一密鑰',則應用程序的路徑用於派生密鑰。

的代碼將是這樣的:

private static MethodInfo _cookieEncryptMethod; 
private static MethodInfo _cookieDecryptMethod; 

public static string MachineKeyEncrypt(string data) 
{ 
    if (_cookieEncryptMethod == null) 
    { 
     _cookieEncryptMethod = Type.GetType("System.Web.Security.CookieProtectionHelper").GetMethod("Encode", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.InvokeMethod); 
    } 

    var dataBytes = Encoding.UTF8.GetBytes(data); 

    return (string) _cookieEncryptMethod.Invoke(null, new object[] { CookieProtection.All, dataBytes, dataBytes.Length }); 
} 

public static string MachineKeyDecrypt(string source) 
{ 
    if (_cookieDecryptMethod == null) 
    { 
     _cookieDecryptMethod = Type.GetType("System.Web.Security.CookieProtectionHelper").GetMethod("Decode", BindingFlags.Static | BindingFlags.NonPublic | BindingFlags.InvokeMethod); 
    } 

    var data = (byte[]) _cookieDecryptMethod.Invoke(null, new object[] { CookieProtection.All, source }); 

    return Encoding.UTF8.GetString(data); 
} 
相關問題