0

アプリケーションのインストール中にユーザーが提供するパスワードの暗号化と復号化を扱っています。パスワードをハードコーディングして以下に提供すると、すべてが完璧になりました。

static byte[] entropy = System.Text.Encoding.Unicode.GetBytes("!23$cal1s");

ここでハードコードの代わりにランタイム変数(パラメーターなど)を渡す方法はありますか

static byte[] entropy = System.Text.Encoding.Unicode.GetBytes(variable);

私はこれで一週間打ちのめされました。助けてください。私は開発者ではありませんが、これを行う必要があります

私のコード全体:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Configuration;
using System.Security;

namespace EncryptionProg
{

  public class EncrptionHelper
    {

        #region Member variables
        public const string initVector = "!23$cal1s" ;
       #endregion

        public string AppSettingKey { get; set; }
        public string ConfileFilePath { get; set; }
        public string Password { get; set; }
        static readonly byte[] entropy = System.Text.Encoding.Unicode.GetBytes(initVector);

        #region Public Methods

        public void EncryptDecryptmethod(string configFilePathName, string appSettingKey, string appSettingValue)
        {
           SetSetting(appSettingKey, appSettingValue, configFilePathName);
        }

        public static string EncryptString(System.Security.SecureString input)
        {

            byte[] encryptedData = System.Security.Cryptography.ProtectedData.Protect(
                System.Text.Encoding.Unicode.GetBytes(ToInsecureString(input)), entropy, System.Security.Cryptography.DataProtectionScope.CurrentUser);
            return Convert.ToBase64String(encryptedData);
        }

        public static SecureString DecryptString(string encryptedData)
        {
            try
            {
                byte[] decryptedData = System.Security.Cryptography.ProtectedData.Unprotect(
                    Convert.FromBase64String(encryptedData),
                    entropy,
                    System.Security.Cryptography.DataProtectionScope.CurrentUser);
                return ToSecureString(System.Text.Encoding.Unicode.GetString(decryptedData));
            }
            catch
            {
                return new SecureString();
            }
        } 
        #endregion

        #region Private Methods
        static bool SetSetting(string Key, string Value, string configFilePath)
        {
            bool result = false;
            try
            {
                System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(configFilePath);
                //config.AppSettings.File = configFilePath;
                config.AppSettings.Settings.Remove(Key);
                var kvElem = new KeyValueConfigurationElement(Key, Value);
                config.AppSettings.Settings.Add(kvElem);

                config.Save(ConfigurationSaveMode.Modified);

                ConfigurationManager.RefreshSection("appSettings");

                result = true;
            }
            finally
            { }
            return result;
        }

        static string GetSetting(string Key, string configFilePath)
        {
            string result = null;
            try
            {
                System.Configuration.Configuration config = ConfigurationManager.OpenExeConfiguration(configFilePath);
                result = config.AppSettings.Settings[Key].Value.ToString();
            }
            finally
            { }
            return result;
        }

        static SecureString ToSecureString(string input)
        {
            SecureString secure = new SecureString();
            foreach (char c in input)
            {
                secure.AppendChar(c);
            }
            secure.MakeReadOnly();
            return secure;
        }

        static string ToInsecureString(SecureString input)
        {
            string returnValue = string.Empty;
            IntPtr ptr = System.Runtime.InteropServices.Marshal.SecureStringToBSTR(input);
            try
            {
                returnValue = System.Runtime.InteropServices.Marshal.PtrToStringBSTR(ptr);
            }
            finally
            {
                System.Runtime.InteropServices.Marshal.ZeroFreeBSTR(ptr);
            }
            return returnValue;
        } 
        #endregion

    }
}
4

0 に答える 0