如果您选择将数据加密为文件,则应使用System.Security.ProtectedData类。
您加密的数据可以绑定到当前用户或正在进行编码/解码的当前机器。
您应该使用两种简单的方法:
- Protect - 获取一个字节数组并加密数据。
- Unprotect - 获取加密数据并返回一个字节数组。
例子:
private static void EncryptData(string data, Stream stream)
{
if (stream.CanWrite == false)
throw new IOException("Cannot write to stream.");
var bytes = Encoding.UTF8.GetBytes(data);
var encryptedBytes = ProtectedData.Protect(bytes, null, DataProtectionScope.CurrentUser);
stream.Write(encryptedBytes , 0, encryptedBytes .Length);
}
private static string DecryptData(Stream stream)
{
if (stream.CanRead == false)
throw new IOException("Cannot read fromstream.");
using (MemoryStream memoryStream = new MemoryStream())
{
stream.CopyTo(memoryStream);
var encryptedBytes = memoryStream.ToArray();
var decryptedBytes = ProtectedData.Unprotect(encryptedBytes, null, DataProtectionScope.CurrentUser)
return Encoding.UTF8.GetString(decryptedBytes);
}
}
现在为了简单地将它们与 FileStream 一起使用:
public static void Encrypt(string password)
{
using (var fileStream = new FileStream(@"MyFile.dat", FileMode.Create))
{
EncryptData(password, fileStream);
fileStream.Close();
}
}
public static string Decrypt()
{
string password;
using (var fileStream = new FileStream(@"MyFile.dat", FileMode.Open))
{
password = DecryptData(fileStream);
fileStream.Close();
}
return password;
}
顺便说一句,如果您想增加加密的复杂性,您可以将熵传递给 Protect 和 Unprotect 方法。有关详细信息,请参阅:http: //msdn.microsoft.com/en-us/library/system.security.cryptography.protecteddata.protect (v=vs.110).aspx