1

我们正在编写一种工具来将数据从 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 在幕后做了什么让我们能够解密商店数据?

4

1 回答 1

1

很抱歉没有直接的答案,但您不能从您的桌面应用程序中引用 WinRT API 来解密这个安全字节吗?

这是在 WPF 应用程序中引用 WinRT API 的指南:http ://www.hanselman.com/blog/HowToCallWinRTAPIsInWindows8FromCDesktopApplicationsWinRTDiagram.aspx

问候

于 2015-12-10T14:54:50.373 回答