У меня есть компонент, который сохраняет конфиденциальные данные в файл. Для этого он расшифровывает содержимое перед тем, как записать конец. Зашифровывает его при чтении:
internal static readonly byte[] AesEncryptionKey = Encoding.ASCII.GetBytes("NoNoDontSeeMeI'mtotallySecret?*%");
internal static readonly byte[] AesEncryptionIV = Encoding.ASCII.GetBytes("This is the IV%%");
internal void Serialize(DataNodeSystem systemnode)
{
string sFilename = systemnode.GetSerializationFilename();
Stream writer = null;
try
{
writer = new FileStream(sFilename, FileMode.Create, FileAccess.Write);
using (AesManaged aesManagesd = new AesManaged())
{
Stream cryptoStream = null;
try
{
cryptoStream = new CryptoStream(
writer, aesManagesd.CreateEncryptor(AesEncryptionKey, AesEncryptionIV),
CryptoStreamMode.Write);
writer = null;
using (StreamWriter unicodeStreamWriter = new StreamWriter(cryptoStream, Encoding.Unicode))
{
cryptoStream = null;
var serializer = new XmlSerializer(GetType(), new XmlRootAttribute("SystemNodes"));
serializer.Serialize(unicodeStreamWriter, this);
}
}
finally
{
if (cryptoStream != null)
{
cryptoStream.Dispose();
}
}
}
}
finally
{
if (writer != null)
{
writer.Dispose();
}
}
}
Созданный файл не может зависеть от компьютера, поскольку компонент должен иметь возможность читать / записывать файлы, поступающие с другого компьютера. У нас есть несколько клиентских программ (. net и нативный c ++), работающих в одной и той же системе, которые используют компонент для получения содержимого из зашифрованного файла
Так что вопрос: как я могу предотвратить просто просматриваете мой код с помощью ILSpy, Reflector или чего-то в этом роде и просто читаете ключ и расшифровываете файл? Нельзя спрашивать у пользователя ключ. Кроме того, машина может или не может быть подключена к inte rnet, поэтому получить что-то с нашего сервера тоже не вариант