我正在测试将 .net v4 的 System.Security.Cryptography.ProtectedData() 和 UnprotectData() 方法与 DataProtectionScope.LocalMachine 范围一起使用以确保文件只能在单台机器上加密/解密的想法。这是我在做什么的一般想法......
//Encrypt
byte[] outBytes = ProtectedData.Protect(File.ReadAllBytes(fileIn), null, DataProtectionScope.LocalMachine);
File.WriteAllBytes(fileOut, outBytes);
//Decrypt
byte[] outBytes = ProtectedData.Unprotect(File.ReadAllBytes(fileIn), null, DataProtectionScope.LocalMachine);
File.WriteAllBytes(fileOut, outBytes);
我已经完成了大量测试,以确保在执行此操作时获得预期的行为,并且它似乎可以完美地工作,因为同一台机器上的任何用户都可以使用上面列出的方法调用加密/解密文件。
我的问题是,如果有人制作包含使用此机制加密的文件的系统的磁盘映像或克隆(使用 Acronis、Ghost 等),然后将该映像恢复到另一台机器,会发生什么?(一个例子是 IT 部门预加载了一个系统,然后该系统成为一组具有相同硬件配置的机器的基本映像)。在不同硬件上恢复的操作系统是否能够解密在“原始”系统上加密的文件?我希望由于不同的硬件,解密会失败,但如果所有必要的加密信息都存在于注册表或文件系统中,它可能会起作用。
显然,我可以自己测试这个,但我现在真的没有资源这样做,并且一直在无休止地搜索,看看是否有其他人可能已经知道答案。非常感谢任何建议!