# Meer over mijn reis naar de prachtige wereld van ASP.NET 1.x ViewState

<datetime class="hidden">2004-02-29T00:00</datetime>

<!-- category -- mostlylucidcouk, Imported, ASP.NET, Security -->
Ik schreef in een [vorige post](/posts/694.aspx) Ik besloot een poke te hebben met hem. [BesigtigState](http://msdn.microsoft.com/library/en-us/cpref/html/frlrfsystemwebuicontrolclassviewstatetopic.asp), 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](http://msdn.microsoft.com/library/default.asp?url=/library/en-us/cpref/html/frlrfsystemwebuilosformatterclasstopic.asp) Om de serialisatie van het object te doen, gebruikt het volgende code: (dank nogmaals aan de onontkoppelbare. [Reflector](http://www.aisto.com/roeder/dotnet/)) :

```
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.