2015-12-09 35 views
1

我们正在编写一个工具,用于将数据从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在幕后做了什么事情,可以让我们解密商店数据?

+0

是否存储代码的工作? [文档](https://msdn.microsoft.com/en-us/library/windows/apps/br241562.aspx)建议它不应该 - “在开始解密操作之前不要使用此构造函数。您必须使用改为'DataProtectionProvider()'构造函数。“ –

+0

是的商店应用程序工作正常,商店的应用程序作者是幸运的或文档不正确 –

+0

解密显然*可以*而不指定范围的事实表明该范围存储(可能不加密,但不一定是人为的)可读)与数据一起。就我所知,通常的DPAPI不​​会那样做。这可能至少是为什么使用'ProtectedData'和使用'DataProtectionProvider'加密的数据不起作用的部分原因。 – CBHacking

回答

相关问题