使用 Windows 数据保护 API,可以加密内存中的数据,如以下代码所示:
byte[] toEncrypt = UnicodeEncoding.ASCII.GetBytes("ThisIsSomeData16");
Console.WriteLine("Original data: " + UnicodeEncoding.ASCII.GetString(toEncrypt));
Console.WriteLine("Encrypting...");
// Encrypt the data in memory.
EncryptInMemoryData(toEncrypt, MemoryProtectionScope.SameLogon);
Console.WriteLine("Encrypted data: " + UnicodeEncoding.ASCII.GetString(toEncrypt));
Console.WriteLine("Decrypting...");
// Decrypt the data in memory.
DecryptInMemoryData(toEncrypt, MemoryProtectionScope.SameLogon);
Console.WriteLine("Decrypted data: " + UnicodeEncoding.ASCII.GetString(toEncrypt));
请参阅此处的 Microsoft 参考:https ://msdn.microsoft.com/en-us/library/ms995355.aspx
但是,此示例中的加密数据与原始数据的大小相同。有没有办法利用 DPAPI 加密数据而不泄露原始文件的文件大小?例如,将生成的密文隐藏在密钥内的“随机”位置,尽可能使用一次性密码?