API защиты данных (DPAPI) делает именно то, что вам нужно. Он обеспечивает симметричное шифрование произвольных данных, используя учетные данные компьютера или (лучше) пользователя, в качестве ключа шифрования. Вам не нужно беспокоиться об управлении ключами; Windows позаботится об этом за вас. Если пользователь изменяет свой пароль, Windows повторно зашифрует данные, используя новый пароль пользователя.
DPAPI предоставляется в .NET с помощью класса System.Security.Cryptography.ProtectedData:
byte[] plaintextBytes = GetDataToProtect();
byte[] encodedBytes = ProtectedData.Protect(plaintextBytes, null, DataProtectionScope.CurrentUser);
Вторым параметром метода Protect является необязательный энтропийный байтовый массив, который можно использовать в качестве дополнительного специфического для приложения «секрета».
Чтобы расшифровать, используйте вызов ProtectedData.Unprotect:
byte[] encodedBytes = GetDataToUnprotect();
byte[] plaintextBytes = ProtectedData.Unprotect(encodedBytes, null, DataProtectionScope.CurrentUser);
DPAPI корректно работает с перемещаемыми профилями (как описано здесь ), хотя вам необходимо хранить зашифрованные данные в одном месте (общий сетевой ресурс, IsolatedStorage с IsolatedStorageScope.Roaming , и т. д.), что ваши различные машины могут получить доступ.
См. Класс ProtectedData в MSDN для получения дополнительной информации. Здесь есть официальный документ DPAPI здесь , содержащий больше информации, чем вы когда-либо хотели.