我正在编写一些代码,这些代码在理想情况下可以使用Windows加密文件。如果文件可以直接读取到内存中,这是很好的,但如果不能,我就不能加密它。ProtectedData.Protect采用3个参数--数据作为字节数组,可选熵作为字节数组,以及范围。
当我按下面的方式使用它时,它会产生两个不同的结果:
var data = new byte[]{1, 2, 3, 4, 5, 6, 7, 8};
byte[] encryptedDataA = ProtectedData.Protect(data, null, DataProtectionScope.CurrentUser);
byte[] encryptedDataB = ProtectedData.Protect(data, null, DataProtectionScope.CurrentUser);
Console.WriteLine(encryptedDataA.SequenceEqual(encryptedDataB));
// False!!!!指定相同的熵也会导致不同的结果。这里是一个MSDN回答,证实了这一点。但是,我没有找到详细说明标题或如何读取它的文档。
因为除了一个byte[]之外,没有任何重载,所以我找不到修复它的方法来加密大型文件,而不会对数据进行丑陋的分组。
有办法解决这个问题吗?
发布于 2018-10-17 00:29:00
如果您查看源代码 for ProtectedData.Protect,您会发现它在某个时候将调用重定向到Crypt32库:CryptProtectData函数。
在备注部分,您将看到:
函数创建一个会话密钥来执行加密。当要解密数据时,将再次导出会话密钥。
在我看来,每次调用函数时,都会生成一个新的键。
因此,如果每次都需要获得相同的值,则最好使用AES。
https://stackoverflow.com/questions/52845115
复制相似问题