我有一個使用.NET 4.5.2的MVC應用程序。在這個程序,我將machineKey如下:爲什麼我的「隨機」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" />
現在,當我跑我的代碼,我再次找回了我的鑰匙,我注意到,每一次我都產生一個新的密鑰時,前四個在驗證密鑰中和在解密密鑰中一樣。我已經在12個不同的服務器上部署了這個應用程序,並且模式是相同的(所有服務器上的字節都不相同,但前四個八位字節總是在同一臺服務器上的兩個鍵上匹配)。例如,在一個情況下,我的鑰匙都開始像這樣:
確認鍵:B298BA4E 463CB2934329 ...
解密密鑰:B298BA4E 0505BF0A9424 ...
所以我的問題:
爲什麼「隨機」鍵在開始時都有相同的字節?或者,我是否正確讀取這些密鑰?
P.S.我知道這些密鑰很難達到目的,並且出於安全原因非常重要,我通常不應該這樣做。我正在嘗試創建一個關於負載平衡的技術培訓演示/演示,並說明爲什麼正確管理您的MachineKeys非常重要。我絕對不會用生產代碼來做這樣的事情,但當通過負載均衡器查看爲演示目的而改變的等式的變量時,很高興看到這些事情。所以請不要告訴我我不應該這樣做。是的我知道。
P.P.S.如果你遇到這個帖子,你可能不應該使用我的代碼。這是一個壞主意!
我認爲這是完美的解釋。謝謝!很高興像你這樣的聰明帥哥能夠幫助別人! – Jaxidian
順便說一句,我現在已經證實,你對使用',IsolateByAppId'的評論也使得接下來的4個八位字節是相同的。這絕對是正確的答案。謝謝! – Jaxidian