最近要做ASP.NET裡面web.config加密的工作,請問除了connectionStrings和appSettings之外其他參數有沒有方法可以做加密?謝謝
可以另一個選擇 INI 檔,好用、簡單 用在網站或是 WinForm 來做處理都適合。 那參數你也可以自行要想怎麼加密都可以..
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
private static extern long WritePrivateProfileString(string section, string key, string val, string filePath);
[DllImport("kernel32.dll", CharSet = CharSet.Unicode)]
private static extern int GetPrivateProfileString(string section, string key, string def, StringBuilder retVal, int size, string filePath);
/// <summary>
/// [預設變數] - 指定 _bDisposed 是否為 關閉
/// </summary>
private bool _bDisposed = false;
/// <summary>
/// [預設變數] - 填入 INI 檔的路徑加檔案
/// </summary>
private string _FilePath = string.Empty;
/// <summary>
/// [預設變數] - 目錄是否存在
/// </summary>
public bool _Out_Directory { get; set; }
/// <summary>
/// [預設變數] - 檔案是否存在
/// </summary>
public bool _Out_DirectoryFiles { get; set; }
/// <summary>
/// [建構式] - 提供 INI 的檔案位置
/// </summary>
/// <param name="_strFilesNAME">請提供 [應用程式的根目錄] 的檔案名稱。</param>
public _CustomProgram_RegeditINI(string _strFilesNAME)
{
_FilePath = System.AppDomain.CurrentDomain.BaseDirectory + _strFilesNAME;
_Out_Directory = Directory.Exists(System.AppDomain.CurrentDomain.BaseDirectory);
_Out_DirectoryFiles = File.Exists(_FilePath);
}
/// <summary>
/// [解構式]
/// </summary>
~_CustomProgram_RegeditINI()
{
Dispose(false);
}
/// <summary>
/// 釋放資源(程式設計師呼叫)。
/// </summary>
public void Dispose()
{
Dispose(true);
GC.SuppressFinalize(this); //要求系統不要呼叫指定物件的完成項。
}
/// <summary>
/// 釋放資源(給系統呼叫的)。
/// </summary>
protected virtual void Dispose(bool IsDisposing)
{
if (_bDisposed)
{
return;
}
if (IsDisposing)
{
//補充:
//這裡釋放具有實做 IDisposable 的物件(資源關閉或是 Dispose 等..)
//ex: DataSet DS = new DataSet();
//可在這邊 使用 DS.Dispose();
//或是 DS = null;
//或是釋放 自訂的物件。
//因為我沒有這類的物件,故意留下這段 code ;若繼承這個類別,
//可覆寫這個函式。
}
_bDisposed = true;
}
/// <summary>
/// 設定 KeyValue 值。
/// </summary>
/// <param name="IN_Section">Section。</param>
/// <param name="IN_Key">Key。</param>
/// <param name="IN_Value">Value。</param>
public void setKeyValue(string IN_Section, string IN_Key, string IN_Value)
{
WritePrivateProfileString(IN_Section, IN_Key, IN_Value, this._FilePath);
}
/// <summary>
/// 取得 Key 相對的 Value 值。
/// </summary>
/// <param name="IN_Section">Section。</param>
/// <param name="IN_Key">Key。</param>
public string getKeyValue(string IN_Section, string IN_Key)
{
StringBuilder temp = new StringBuilder(600);
int i = GetPrivateProfileString(IN_Section, IN_Key, "", temp, 600, this._FilePath);
return temp.ToString();
}
/// <summary>
/// 取得 Key 相對的 Value 值,若沒有則使用預設值(DefaultValue)。
/// </summary>
/// <param name="Section">Section。</param>
/// <param name="Key">Key。</param>
/// <param name="DefaultValue">DefaultValue。</param>
public string getKeyValue(string Section, string Key, string DefaultValue)
{
StringBuilder sbResult = null;
try
{
sbResult = new StringBuilder(600);
GetPrivateProfileString(Section, Key, "", sbResult, 600, this._FilePath);
return (sbResult.Length > 0) ? sbResult.ToString() : DefaultValue;
}
catch
{
return string.Empty;
}
}
/// <summary>
/// [appSettings] - ASPWebSite - 指定取得 appSettings 相關內容
/// </summary>
/// <param name="_appSettings_Key"></param>
/// <returns></returns>
public string getAppSettings(string _appSettings_Key)
{
StringBuilder temp = new StringBuilder(600);
int i = GetPrivateProfileString("appSettings", _appSettings_Key, "", temp, 600, this._FilePath);
return temp.ToString();
}
/// <summary>
/// [connectionStrings] - ASPWebSite - 指定取得 connectionStrings 相關內容
/// </summary>
/// <param name="_appSettings_Key"></param>
/// <returns></returns>
public string getConnectionStrings(string _connectionStrings_Key)
{
StringBuilder temp = new StringBuilder(600);
int i = GetPrivateProfileString("connectionStrings", "Connection_" + _connectionStrings_Key, "", temp, 600, this._FilePath);
return temp.ToString();
}