如何为MachineKey.Protect

时间:2018-06-18 17:30:46

标签: c# security cryptography machinekey .net-4.6.1

使用,Machinekey.Protect,有目的地取消保护以及以下设置。

<machineKey validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="SHA1"
                    decryption="Auto" />

问题: 现在,需要将负载平衡和主要条件转移到所有服务器上的相同机器密钥。以上web.config导致现有受保护密钥出现问题,这些密钥无法进行取消保护。

如何找到特定的验证密钥和解密密钥,这样我就可以使用与静态密钥相同的密钥。

尝试使用以下方法但是,它没有用。

   public static byte[] GetKey(object provider, string name)
    {
        var validationKey = provider.GetType().GetMethod(name).Invoke(provider, new object[0]);
        return (byte[])validationKey.GetType().GetMethod("GetKeyMaterial").Invoke(validationKey, new object[0]);
    }

    private void getKeysFinal()
    {
        var machineKey = typeof(MachineKeySection).GetMethods(BindingFlags.Static | BindingFlags.NonPublic).Single(a => a.Name == "GetApplicationConfig").Invoke(null, new object[0]);

        var type = Assembly.Load("System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a").GetTypes().Single(a => a.Name == "MachineKeyMasterKeyProvider");

        var instance = type.Assembly.CreateInstance(
            type.FullName, false,
            BindingFlags.Instance | BindingFlags.NonPublic,
            null, new object[] { machineKey, null, null, null, null }, null, null);

        var validationKey = type.GetMethod("GetValidationKey").Invoke(instance, new object[0]);
        var key = (byte[])validationKey.GetType().GetMethod("GetKeyMaterial").Invoke(validationKey, new object[0]);


        _validationKey = GetKey(instance, "GetValidationKey");
        _decryptionKey = GetKey(instance, "GetEncryptionKey");

     var dKey = Convert.ToBase64String(_decryptionKey);
      var vKey = Convert.ToBase64String(_validationKey );

    }

0 个答案:

没有答案