This is a viewer only at the moment see the article on how this works.
To update the preview hit Ctrl-Alt-R (or ⌘-Alt-R on Mac) or Enter to refresh. The Save icon lets you save the markdown file to disk
This is a preview from the server running through my markdig pipeline
Meer over mijn reis naar de prachtige wereld van ASP.NET 1.x ViewState
Sunday, 29 February 2004
Ik schreef in een vorige post Ik besloot een poke te hebben met hem. BesigtigState, het uitbreiden van de dingen die ik gedaan heb op compression in encryptie en ondertekenen, etc. ... daar is het goed en slecht nieuws voor dit plan LosFormatter Om de serialisatie van het object te doen, gebruikt het volgende code: (dank nogmaals aan de onontkoppelbare. Reflector) :
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);
}
Zoals je waarschijnlijk ziet, handlet deze code de toepassing van de MAC-sleutel en de versleuteling naar de serialiseerde data.
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;
}
Helaas, betekent dit dat ik' ofwel zal moeten spelen met reflectie M SK2 de bron weggooien van Refelector / volledig heruitvinden hoe dit werkt om veel verder te gaan met mijn ViewState-teinken , god, het was wel leuk ' het zou mooi zijn geweest als deze dingen in het begin met een Fabricatie waren gemaakt MSC6 zeg maar dat ze het niet deden M SK7 ik denk niet dat iemand gek genoeg zou zijn om ermee te willen spelen
Ik zal uiteindelijk een artikel moeten schrijven. Het probleem voor mij is het ding zo te structureren dat het voor niet-obsessieve mensen leesbaar is.