В моем приложении я настроил механизм защиты данных для хранения сгенерированных ключей в файле в моей системе:
services.AddDataProtection()
.PersistKeysToFileSystem(new DirectoryInfo(@"C:\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. После расшифровки у нас есть следующий ключ:
"'<¤qªÜÃÐ+{%jãëh!!2ëôc4Jxóôq¹äïç ¤1ÐòÊ|,4÷Î*j»_"
Но в нем 66 символов вместо 32. Как получить 32-битный симметричный ключ AES, потому что я не понимаю, как ASP.NET Core сохраняет этот ключ.
Буду очень признателен за любую помощь.