Если я делаю следующее в классе, мой пароль кэшируется / обнаруживается в памяти?
public class ConnectionInfo
{
private SecureString _password;
public string UserName;
public string Password
{
get
{
IntPtr valuePtr = IntPtr.Zero;
try
{
valuePtr = Marshal.SecureStringToGlobalAllocUnicode(_password);
return Marshal.PtrToStringUni(valuePtr);
}
finally
{
Marshal.ZeroFreeGlobalAllocUnicode(valuePtr);
}
}
set
{
_password = new SecureString();
foreach (char c in value)
{
_password.AppendChar(c);
}
}
}
}
Другими словами, если я использую его следующим образом
ConnectionInfo connectionInfo = new Models.DomainInfo();
connectionInfo.Password = "Password1";
ипозже используйте его с каталогом. Entry
DirectoryEntry entry = new DirectoryEntry("LDAP://Domain.com", $"Domain\\{connectionInfo.UserName}", connectionInfo.Password);
. Пароль в открытом тексте кэшируется через свойство Password?(Я не имею в виду какие-либо утечки, которые могут произойти через DirectoryEntry и т. Д., Только свойство)
Пароль хранится в web / app.config и извлекается через этот
staticKey = Encoding.UTF8.GetBytes(sEncryptionKey.Substring(0, 8));
DESCryptoServiceProvider des = new DESCryptoServiceProvider();
inputByteArray = Convert.FromBase64String(stringToDecrypt);
MemoryStream ms = new MemoryStream();
CryptoStream cs = new CryptoStream(ms, des.CreateDecryptor(staticKey, staticIV), CryptoStreamMode.Write);
cs.Write(inputByteArray, 0, inputByteArray.Length);
cs.FlushFinalBlock();
Encoding encoding = Encoding.UTF8;
return encoding.GetString(ms.ToArray());
Является лидостаточно сильное шифрование?