如何从桌面应用程序解密Windows Store DPAPI保护的数据
我们正在编写一个工具,用于将数据从Windows应用商店应用迁移到Windows桌面应用。商店应用使用我们需要能够从桌面应用程序解密的DPAPI保护一些数据。如何从桌面应用程序解密Windows Store 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在幕后做了什么事情,可以让我们解密商店数据?
对不起,没有直接的答案,但不能从桌面应用程序引用WinRT API来解密此安全字节?
下面是引用的WinRT API在WPF应用程序指南:http://www.hanselman.com/blog/HowToCallWinRTAPIsInWindows8FromCDesktopApplicationsWinRTDiagram.aspx
问候
我们终于把代码放在了IBuffers和Storages的世界里工作,并且非常适合工作 - 谢谢 –
我很高兴它适合你 –
是否存储代码的工作? [文档](https://msdn.microsoft.com/en-us/library/windows/apps/br241562.aspx)建议它不应该 - “在开始解密操作之前不要使用此构造函数。您必须使用改为'DataProtectionProvider()'构造函数。“ –
是的商店应用程序工作正常,商店的应用程序作者是幸运的或文档不正确 –
解密显然*可以*而不指定范围的事实表明该范围存储(可能不加密,但不一定是人为的)可读)与数据一起。就我所知,通常的DPAPI不会那样做。这可能至少是为什么使用'ProtectedData'和使用'DataProtectionProvider'加密的数据不起作用的部分原因。 – CBHacking