如何从桌面应用解密 Windows Store DPAPI 保护数据

How to decrypt Windows Store DPAPI protected data from desktop app

我们正在编写一个工具,将数据从 Windows 商店应用程序迁移到 Windows 桌面应用程序。商店应用程序使用 DPAPI 保护一些数据,我们需要能够从桌面应用程序解密这些数据。

当调用 ProtectedData.Unprotect 方法时,我们得到一个 CryptographicException 说明 "the parameter is invalid"。查看商店应用程序代码,我可以看到 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 在幕后做了什么可以让我们解密商店数据?

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

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

此致