使用 ProtectedData.Unprotect 时,密钥不适用于指定状态错误

Pin*_*Dev 5 asp.net cryptography

我在使用简单的 ProtectedData.Unprotect 调用时遇到了一些问题,这是我正在共享的代码,也许我在这里遗漏了一些东西。

public static byte[] SampleDecrypt(IEncrypted symmetricallyEncrypted, string base64DpapiLocalEncyrptedKey)
        {
            if (base64DpapiLocalEncryptedKey == null)
            {
                throw new ArgumentNullException("base64DpapiLocalEncryptedKey");
            }


            byte[] unprotectedKey = 
               ProtectedData.Unprotect(
                    base64DpapiLocalEncyrptedKey,
                    null,
                    DataProtectionScope.LocalMachine);


            return unprotectedKey;
        }
Run Code Online (Sandbox Code Playgroud)

其中base64DpapiLocalEncyrptedKey为:“ABCCENCMnd8CFdERjHoAVV/Pl+sMAAAA4q4wemrun5a67ohPku3cIAQCCCBAAAAKKKDZgAAqAAAABADDDCvGV5W6fCNcWbb9LPZp2U3AAAYYYSBBBCgDDDDEAAAANlpDcUbBvGqMyHXk8CPtUEoBBBBlB1TtM ZRC05ASxGV1/c3U548eVSPUO4X307ZDjRYytjNC35Di92q9RQAAACN//xNkexvIrGULI9GG9MdyS9Lee=="

当我运行上面的命令时,它给了我“密钥在指定状态下无效”

提前非常感谢你们!

Pin*_*Dev 3

我已经找出问题所在了。DPAPI 将加密密钥与您的计算机配对(假设它是使用计算机范围加密的),在我的例子中,使用的是本地计算机范围。

我认为它可以帮助任何遇到同样问题的人。将密钥尝试到不同的机器上,看看其中一台是否有效,而不是在另一台机器上尝试,以验证您的密钥是否错误。

我从不同的服务器创建了一个新密钥并能够使用它。