gpt4 book ai didi

c# - 为什么我的 "random"MachineKey 的验证 key 和解密 key 都以相同的字节开头?

转载 作者:行者123 更新时间:2023-11-30 20:43:20 25 4
gpt4 key购买 nike

我有一个使用 .NET 4.5.2 的 MVC 应用程序。在此应用中,我按如下方式设置 MachineKey:

    <machineKey compatibilityMode="Framework45" validationKey="25E5749C117E4072E721DA0B8A88B052AAA821CA1D1638C10F0DBF528C19D296134A996B5FA934E1032C9BA9FBDC45EF8806153D683EF4F6C833E7BF6639C513" decryptionKey="DC7ACBAD80BC8EDBD1429F102CEC1C210604DA6C3E6421A4" validation="SHA1" decryption="AES" />

然后我运行我的 GetMachineKey 代码(它依赖于 ReflectionMagic 以在访问内部属性时保持反射代码简单):

    public static Tuple<string, string> GetKeys()
{
var mksType = typeof(MachineKeySection);
var getAppConfigMethod = mksType.GetMethod("GetApplicationConfig", BindingFlags.NonPublic | BindingFlags.Static);
var boxedMachineKeySection = getAppConfigMethod.Invoke(null, null);
var machineKeySection = boxedMachineKeySection as MachineKeySection;

var dynKeySection = machineKeySection.AsDynamic();

var encryptionKeyBytes = (byte[])dynKeySection.DecryptionKeyInternal;
var encryptionKeyString = string.Concat(encryptionKeyBytes.Select(b => b.ToString("X2")));
var validationKeyBytes = (byte[])dynKeySection.ValidationKeyInternal;
var validationKeyString = string.Concat(validationKeyBytes.Select(b => b.ToString("X2")));

return new Tuple<string, string>(encryptionKeyString, validationKeyString);
}

运行该代码后,我成功地检索了我的 ValidationKey 和 DecryptionKey。伟大的!完美的!在那种情况下正是我想要的!

接下来,我这样设置我的 MachineKey:

    <machineKey compatibilityMode="Framework45" validationKey="AutoGenerate,IsolateApps" decryptionKey="AutoGenerate,IsolateApps" validation="SHA1" decryption="AES" />

现在,当我运行我的代码时,再次检索我的 key ,我注意到每次生成新 key 时,前四个八位字节在验证 key 和解密 key 中都是相同的。我现在已经在 12 台不同的服务器上部署了这个应用程序,模式是相同的(所有服务器上的字节不同,但前四个八位字节在同一服务器的两个 key 上总是匹配)。例如,在一个实例中,我的 key 都是这样开头的:

验证 key : B298BA4E463CB2934329...

解密 key : B298BA4E0505BF0A9424...

所以我的问题:

为什么“随机”键的开头字节相同?或者,我是否正确读取了这些 key ?

P.S. 我知道这些 key 很难拿到,而且出于安全原因非常重要,我通常不应该这样做。我正在尝试创建一个技术培训演示/演示文稿,讨论负载平衡并展示为什么正确管理 MachineKeys 很重要。我永远不会对生产代码做这样的事情,但很高兴在通过负载平衡器查看方程式的变量时看到这些东西被更改以用于演示目的。所以请不要告诉我我不应该这样做。是的,我知道。

P.P.S. 如果您看到这篇文章,您可能不应该使用我的代码。这是个坏主意!

最佳答案

来自 the documentation :

"The IsolateApps modifier specifies that ASP.NET generates a unique encrypted key for each application using the application ID of each application"

因此,看起来 IsolateApps 是一种保护措施,可以防止不同的应用程序使用相同的 key ,这些应用程序使用相同的机器 key 配置文件。

实际上,前四个字节与您的 appName ( since you are specifying IsolateApps ) 的哈希码相关,而其余字节来自 RandomNumberGenerator.GetBytes。 .参见 herehere在代码中。

按照代码的建议,如果您有“,IsolateByAppId”,the next 4 bytes would be the same .

如果您删除这些“隔离”标志,您可能会得到所有随机字节。

关于c# - 为什么我的 "random"MachineKey 的验证 key 和解密 key 都以相同的字节开头?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30652599/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com