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

时间:2015-12-09 13:40:10

标签: c# windows encryption windows-store-apps dpapi

我们正在编写一个工具,用于将数据从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和entropy null但这会导致上述CryptographicException。据猜测,在内部,商店API使用特定的熵,否则我们无法解密数据。

有没有人知道商店DPAPI API在幕后做什么才能让我们解密商店数据?

1 个答案:

答案 0 :(得分:1)

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

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

此致