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