我們正在編寫一個工具,用於將數據從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在幕後做了什麼事情,可以讓我們解密商店數據?
是否存儲代碼的工作? [文檔](https://msdn.microsoft.com/en-us/library/windows/apps/br241562.aspx)建議它不應該 - 「在開始解密操作之前不要使用此構造函數。您必須使用改爲'DataProtectionProvider()'構造函數。「 –
是的商店應用程序工作正常,商店的應用程序作者是幸運的或文檔不正確 –
解密顯然*可以*而不指定範圍的事實表明該範圍存儲(可能不加密,但不一定是人爲的)可讀)與數據一起。就我所知,通常的DPAPI不會那樣做。這可能至少是爲什麼使用'ProtectedData'和使用'DataProtectionProvider'加密的數據不起作用的部分原因。 – CBHacking