【发布时间】:2026-02-16 01:00:02
【问题描述】:
在我的应用程序中,我已配置数据保护机制以将生成的密钥存储在系统上的文件中:
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"C:\keys"));
而且它正在工作。在我的“keys”目录中生成了一个文件,其内容如下:
<?xml version="1.0" encoding="utf-8"?>
<key id="7139a96c-1d75-468f-a343-1d0d363650a7" version="1">
<creationDate>2019-04-22T14:27:34.9530001Z</creationDate>
<activationDate>2019-04-22T14:27:34.9359888Z</activationDate>
<expirationDate>2019-07-21T14:27:34.9359888Z</expirationDate>
<descriptor deserializerType="Microsoft.AspNetCore.DataProtection.AuthenticatedEncryption.ConfigurationModel.AuthenticatedEncryptorDescriptorDeserializer, Microsoft.AspNetCore.DataProtection, Version=2.2.0.0, Culture=neutral, PublicKeyToken=adb9793829ddae60">
<descriptor>
<encryption algorithm="AES_256_CBC" />
<validation algorithm="HMACSHA256" />
<masterKey p4:requiresEncryption="true" xmlns:p4="http://schemas.asp.net/2015/03/dataProtection">
<!-- Warning: the key below is in an unencrypted form. -->
<value>JzykGRqFcYWq3MPQAyuXe4IlEGrj62ghnCEMMuv0YzRKmHjzlfSOcbnk7+cJpDGe0PLKfCwcNPfOKplqu1xfDg==</value>
</masterKey>
</descriptor>
</descriptor>
</key>
现在我不明白一件事。我使用的是 AES_256_CBC 算法,但是密钥的长度是 88 个字符而不是 32 个字符。
所以我发现密钥是使用 base64 编码的。解码后我们有以下密钥:
"'
但它有 66 个字符而不是 32 个。如何获取 32 位 AES 对称密钥,因为我不明白 ASP.NET Core 是如何保存这个密钥的。
如果有任何帮助,我将不胜感激。
【问题讨论】:
-
是的!我正在尝试通过 Redis 保留密钥,但我找不到关于反序列化结构的任何文档。 Convert.FromBase64String(key) 产生一个 64 字节的值,但 AES_256_CBC 仅适用于 32 字节的密钥?
标签: asp.net-core cryptography aes encryption-symmetric data-protection