所提供的有效负载无法解密,因为它没有受到此保护提供程序的保护

时间:2019-03-25 06:26:19

标签: c# cryptography data-protection .net-core-2.1

我正在使用.NetCore中的数据保护API,同时使用IPersistedDataProtector中的DangerousUnprotect()取消了有效负载保护的同时,我收到了上述错误消息。

我使用IDataProtectionProvider的CreateProtector(“ purpose”)创建了保护器的单个实例,并在不同的API中使用它来保护()和取消保护()数据。两种API都可以很好地满足所有请求,但是在撤销密钥后,我将dataProtector转换为IPersistedDataProtector,然后继续抛出错误“提供的有效负载无法解密,因为它没有受到此保护提供程序的保护。”

从代码的角度来看,我理解该消息是有效的,但无法理解是什么原因引发了该消息。我使用的是相同的应用程序名称和目的字符串。

我也比较了保护器的实例,它们与相同的数据保护提供程序实例相同。有人可以建议如何追踪吗?

目标软件包:Microsoft.AspNetCore.DataProtection(2.1.1)

还访问了问题,但没有看到与此相关的任何修复/相关信息。

// inside .ctor
var services = new ServiceCollection();
services.AddDataProtection().SetApplicationName("ApplicationName");


var serviceProvider = services.BuildServiceProvider();
this.dPProvider = serviceProvider.GetDataProtectionProvider();
this.protector = this.dPProvider.CreateProtector("purpose");

public string Decrypt(string cipherText)
        {
            try
            {
                return this.protector.Unprotect(cipherText);
            }
            catch (Exception exception)
            {
                var persistedProtector = this.protector as IPersistedDataProtector;
                if (persistedProtector == null)
                {
                    throw new Exception($"Protector cannot be null. Also {exception.Message}");
                }
// exception is thrown at below line.
                var unprotectedPayload = persistedProtector.DangerousUnprotect(Encoding.UTF8.GetBytes(cipherText), true, out var requiresMigration, out var wasRevoked);
                if (wasRevoked)
                {
                    return Encoding.UTF8.GetString(unprotectedPayload);
                }

                throw new CryptographicException($"Invalid operation. Also {exception.Message}", exception);
            }
        }

stacktrace:位于Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(Byte [] protectedData,Boolean allowOperationsOnRevokedKeys,UnprotectStatus&status)    在Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.DangerousUnprotect(Byte [] protectedData,Boolean ignoreRevocationErrors,Boolean&requireMigration,Boolean&wasRevoked)

0 个答案:

没有答案