iT邦幫忙

0

web.config除了connectionStrings和appSettings之外其他參數可不可以加密

  • 分享至 

  • xImage

最近要做ASP.NET裡面web.config加密的工作,請問除了connectionStrings和appSettings之外其他參數有沒有方法可以做加密?謝謝

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中

1 個回答

0
PPTaiwan
iT邦好手 1 級 ‧ 2022-02-15 18:17:29
最佳解答

可以另一個選擇 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();
        }

baltic iT邦新手 4 級 ‧ 2022-02-23 15:17:04 檢舉

謝謝

我要發表回答

立即登入回答