Kirjoitin lehteen. edellinen virka että aioin poseerata Näkymätila, laajentaa asioita olen tehnyt pakkaus salaukseen ja allekirjoittaminen jne. , No on hyviä ja huonoja uutisia tälle suunnitelmalle. Näyttää siltä, että (todella) MAC- ja salaus juttuja käsitellään oikeasti LosWriter-luokassa; sisäinen luokka käyttää LosFormatter Object serialization -ohjelman tekemiseen käytetään seuraavaa koodia (kiitos vielä kerran käyttökelvottomalle Heijastin) :
internal void CompleteTransforms(TextWriter output, bool enableMac, byte[] macKey)
{ int num1;
byte[] array1;
string text1;
char[] array2;
string text2;
num1 = 0;
if (this._recyclable)
{
this._byteBuffer = ((byte[]) LosWriter._byteBufferAllocator.GetBuffer());
if (this._freePos > 0)
{
num1 = Encoding.UTF8.GetBytes(this._charBuffer, 0, this._freePos, this._byteBuffer, 0);
}
if (enableMac)
{
array1 = MachineKey.GetEncodedData(this._byteBuffer, macKey, 0, &(num1));
text1 = Convert.ToBase64String(array1, 0, num1);
output.Write(text1);
return;
}
array2 = ((char[]) LosWriter._charBufferAllocatorBase64.GetBuffer());
num1 = Convert.ToBase64CharArray(this._byteBuffer, 0, num1, array2, 0);
output.Write(array2, 0, num1);
LosWriter._charBufferAllocatorBase64.ReuseBuffer(array2);
return;
}
this._byteBuffer = Encoding.UTF8.GetBytes(this._charBuffer, 0, this._freePos);
num1 = this._byteBuffer.Length;
if (enableMac)
{
this._byteBuffer = MachineKey.GetEncodedData(this._byteBuffer, macKey, 0, &(num1));
}
text2 = Convert.ToBase64String(this._byteBuffer);
output.Write(text2);
}
Kuten todennäköisesti näette, tämä koodi käsittelee MAC-avaimen käyttöä ja salausta sarjatietoihin. Tämä on koodi, jota MachineKey käyttää salauksen suorittamiseen:
internal static byte[] EncryptOrDecryptData(bool fEncrypt, byte[] buf, byte[] modifier, int start, int length)
{ MemoryStream stream1;
ICryptoTransform transform1;
CryptoStream stream2;
byte[] array1;
byte[] array2;
MachineKey.EnsureConfig();
stream1 = new MemoryStream();
transform1 = MachineKey.GetCryptoTransform(fEncrypt);
stream2 = new CryptoStream(stream1, transform1, 1);
stream2.Write(buf, start, length);
if (fEncrypt && (modifier != null))
{
stream2.Write(modifier, 0, modifier.Length);
}
stream2.FlushFinalBlock();
array1 = stream1.ToArray();
stream2.Close();
MachineKey.ReturnCryptoTransform(fEncrypt, transform1);
if (!fEncrypt && (modifier != null))
{
array2 = new byte[((uint) (array1.Length - modifier.Length))];
Buffer.BlockCopy(array1, 0, array2, 0, array2.Length);
array1 = array2;
}
return array1;
}
Valitettavasti tämä tarkoittaa, että minun on joko leikiteltävä Refelectorin lähteen pohtimisella / kaadottava Refelectorin lähde kokonaan uudelleen, miten tämä toimii mennäkseni paljon pidemmälle ViewState -keikkailullani, luoja, olisi ollut mukavaa, jos tämä olisi tehty tehtaan kanssa alun perin...epäilyt, että he eivät uskoneet kenenkään olevan niin hullu, että haluaisivat leikkiä sillä...:-)
Lopulta minun täytyy hellittää ja kirjoittaa artikkeli jonakin päivänä. Ongelma minulle on sen jäsentäminen niin, että se on luettavissa ihmisille, jotka eivät ole pakkomielteisiä.
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.