首页 文章

ASP.NET核心数据保护跨平台加密提供程序

提问于
浏览
0

我正在尝试将asp.net核心DataProtectionProvider与支持服务器场的单个数据库一起使用 . 我为商店实现了一个IXmlRepository,并且我成功地为运行我的服务器的两台机器提供了相同的证书 . 我确认我在相同的顺序中使用相同的目的字符串,但是当我尝试从机器b取消保护机器编码的字符串时,我得到一个通用的CryptographicException .

如果机器a和机器b是2个不同的操作系统,这是否重要? (Linux vs Windows服务器)

我得到的例外是:

{System.Security.Cryptography.CryptographicException:抛出了类型'System.Security.Cryptography.CryptographicException'的异常 . 在Microsoft.AspNetCore.Cryptography.UnsafeNativeMethods.ThrowExceptionForBCryptStatusImpl(的Int32 NTSTATUS)在Microsoft.AspNetCore.Cryptography.UnsafeNativeMethods.ThrowExceptionForBCryptStatus(的Int32 NTSTATUS)在Microsoft.AspNetCore.DataProtection.Cng.GcmAuthenticatedEncryptor.DecryptImpl(BYTE * pbCiphertext,UInt32的cbCiphertext,BYTE * pbAdditionalAuthenticatedData,UInt32的cbAdditionalAuthenticatedData)在Microsoft.AspNetCore.DataProtection.Cng.Internal.CngAuthenticatedEncryptorBase.Decrypt(ArraySegment1密文,ArraySegment1 additionalAuthenticatedData)在Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtector.UnprotectCore(字节[] protectedData,布尔allowOperationsOnRevokedKeys,UnprotectStatus&状态) at Microsoft.AspNetCore.DataProtection.KeyManagement.KeyRingBasedDataProtction.KeyManagement.KeyRingBasedDataProtector.DangerousUnprotect(Byte [] protectedData,Boolean ignoreRevocationErrors,Boolean&requiresMigration,Boolean&wasRevoked)at Microsoft.AspNetCore.DataProtection.KeyManagement.Ke Microsoft.AspNetCore.DataProtection.DataProtectionCommonExtensions.Unprotect(IDataProtector protector,String protectedData)中的yRingBasedDataProtector.Unprotect(Byte [] protectedData)

1 回答

  • 2

    我发现提供者有顶级目的的文件夹名称 . 我假设这是为了在存储在注册表中时隔离密钥存储 . 解决方案是将配置设置添加到ApplicationName,以便它使用它而不是两台不同计算机上不同的文件夹 .

    例:

    services.AddDataProtection()
                    .UseCryptographicAlgorithms(new AuthenticatedEncryptorConfiguration()
                    {
                        EncryptionAlgorithm = EncryptionAlgorithm.AES_256_GCM,
                        ValidationAlgorithm = ValidationAlgorithm.HMACSHA256
                    })
                    .SetApplicationName("MyCommonName");
    

相关问题