我们正在编写一种工具来将数据从 Windows 应用商店应用程序迁移到 Windows 桌面应用程序。商店应用程序使用 DPAPI 保护一些数据,我们需要能够从桌面应用程序中解密这些数据。
当调用 ProtectedData.Unprotect 方法时,我们得到一个 CryptographicException 说明“参数无效”。查看商店应用程序代码,我可以看到 DPAPI API 与桌面 .NET 框架不同。商店应用 API 使用如下:
provider = new DataProtectionProvider("LOCAL=user");
...
IBuffer origBuffer = await this.provider.UnprotectAsync(encryptedBuffer);
桌面 API 如下所示
byte[] ProtectedData.Unprotect(byte[] encryptedBytes,
byte[] entropy,
DataProtectionScope scope);
我们曾尝试使用DataProtectionScope.CurrentUser
和熵null
,但这会导致上述 CryptographicException。猜测一下,在内部,存储 API 使用特定的熵,没有它我们无法解密数据。
有谁知道商店 DPAPI API 在幕后做了什么让我们能够解密商店数据?