我们的应用程序安装在客户端位置。应用程序使用 ProtectedData.Protect 方法保护客户端计算机上的密钥并将输出保存到文件中。以下是代码:
ProtectedData.Protect(sampleHashKey, entropy, DataProtectionScope.LocalMachine);
其中熵是一个字节数组。
客户端已将该计算机上的操作系统更新为 Windows 2016 Server,并在此之前备份了哈希密钥文件,并重新安装了我们的软件,该软件创建了一个新的哈希密钥文件。客户端用备份的文件替换了新的散列密钥文件。当软件尝试读取文件时,使用具有以下代码的 unprotect 机制:
ProtectedData.Unprotect(sampleHashKey, entropy, DataProtectionScope.LocalMachine);
引发CryptographicException 并出现错误:密钥在指定状态下无效。
为什么即使文件是使用DataProtectionScope.Localmachine在同一台机器上创建的,也会发生此错误?它不会在同一台机器上跨操作系统工作吗?有人可以解释一下这个问题吗?