Я пытаюсь найти механизм (я знаю, что не существует 100%-ного механизма), который позволит мне защитить значения переменных в памяти или, по крайней мере, чтобы злоумышленникам было немного сложнее их прочитать. Таким образом, я могу защитить конфиденциальные данные в памяти моего приложения и сделать их более «нечитаемыми» для любого другого приложения, которое может отслеживать, выгружать или читать мое приложение во время выполнения.
Я вижу, что такое существует. API защиты данных Microsoft (DPAPI), у которого есть класс ProtectedMemory, который предлагает два метода: защитить и снять защиту, вот пример.
В любом случае, похоже, что MS перестала использовать ProtectedMemory, как какой-то парень говорит здесь, поскольку это бесполезно.
Другие люди вместо этого предлагают хэшировать их с помощью хорошей функции (например, SHA1/2) и сохранять дайджест.
Я бы мне нравится использовать частные свойства (поскольку они используются только внутри моего класса) вместо простой переменной, свойство set которой шифрует ее в памяти, а свойство get расшифровывает ее. Как показано ниже:
Код: Выделить всё
public static MyClass
{
private string MyVariable
{
get
{
return Encoding.UTF8.GetString(ProtectedMemory.Unprotect(_myVariable, MemoryProtectionScope.SameLogon));
}
set
{
_myVariable = Encoding.UTF8.GetBytes(value);
ProtectedMemory.Protect(_myVariable, MemoryProtectionScope.SameLogon);
}
}
private byte[] _myVariable;
}
Я хотел сделать то же самое, что и этот парень в его посте, но некоторые люди говорят: перемещение защищенной памяти из частного резервного поля в свойство не поможет (я не уверен, о чем он говорит, если использование свойства не защищено¿?). Не могли бы вы также подтвердить мне, будет ли использование частного свойства для моих переменных защищено в памяти или нет?
Итак, как мне это сделать? может ли кто-нибудь предоставить простой фрагмент кода? Процесс шифрования/дешифрования должен быть относительно быстрым.
Я не хочу использовать какие-либо сторонние средства, только помощь ОС и .NET Framework.
Подробнее здесь: https://stackoverflow.com/questions/759 ... ng-c-sharp
Мобильная версия