首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >对文件使用ProtectedData.Protect()

对文件使用ProtectedData.Protect()
EN

Stack Overflow用户
提问于 2018-10-16 23:05:57
回答 1查看 1.4K关注 0票数 0

我正在编写一些代码,这些代码在理想情况下可以使用Windows加密文件。如果文件可以直接读取到内存中,这是很好的,但如果不能,我就不能加密它。ProtectedData.Protect采用3个参数--数据作为字节数组,可选熵作为字节数组,以及范围。

当我按下面的方式使用它时,它会产生两个不同的结果:

代码语言:javascript
复制
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[]之外,没有任何重载,所以我找不到修复它的方法来加密大型文件,而不会对数据进行丑陋的分组。

有办法解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-10-17 00:29:00

如果您查看源代码 for ProtectedData.Protect,您会发现它在某个时候将调用重定向到Crypt32库:CryptProtectData函数

备注部分,您将看到:

函数创建一个会话密钥来执行加密。当要解密数据时,将再次导出会话密钥。

在我看来,每次调用函数时,都会生成一个新的键。

因此,如果每次都需要获得相同的值,则最好使用AES。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/52845115

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档