После извлечения ключей проверки и шифрования с использованием приведенного ниже кода я установил указанные ключи в файле web.config, надеясь, что все, что было создано с помощью автоматически сгенерированных ключей, будет расшифровано с помощью статически установленных ключей.
Это, однако, не так, и поэтому все, что генерируется MachineKey.Protect
, когда ключи генерируются автоматически, приводит к сбою MachineKey.Unprotect
, когда ключи установлены, несмотря на то, что ключи теоретически идентичны.
У меня:
- проверено, что
MachineKey.Unprotect
отлично работает для значений, генерируемых MachineKey.Protect
при автоматической генерации ключей, - перепробовал все Значения
<machineKey>
validation
, encryption
и compatibilityMode
, - проверили, что приведенный ниже код возвращает те же ключи независимо от того, установлены они в файле web.config или сгенерированы автоматически (что является ожидается)
К сожалению, установка ключей для чего-то нового не возможна, так как это сделает недействительными все существующие токены.
Любая помощь будет принята с благодарностью!
Код, используемый для извлечения автоматически сгенерированных ключей:
protected void Page_Load (object sender, EventArgs e)
{
MachineKeySection section = (MachineKeySection)
ConfigurationManager.GetSection ("system.web/machineKey");
BindingFlags flags =
BindingFlags.Instance |
BindingFlags.NonPublic |
BindingFlags.GetProperty;
Func<string, byte[]> propertyReader = name => (byte[]) section
.GetType ()
.GetProperty (name, flags)
.GetValue (section, null);
string key = ConvertToHex (
propertyReader ("DecryptionKeyInternal"));
string iv = ConvertToHex (
propertyReader ("ValidationKeyInternal"));
}
private string ConvertToHex (byte[] binary)
{
return binary.Aggregate (
new StringBuilder (),
(acc, c) => acc.AppendFormat ("{0:x2}", c),
acc => acc.ToString());
}
Источник кода: https://web.archive.org/web/20140329202612/http: //aspnetresources.com/blog/how_to_read_auto_generated_machinekey