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
Sunday, 29 February 2004
Jag skrev i en tidigare inlägg som jag planerade att ha en peta runt med Visa tillstånd, utökar saker jag har gjort på komprimering till kryptering och signering etc ... ja det finns bra och dåliga nyheter för denna plan. Det ser ut som (udda) att MAC och kryptering saker faktiskt hanteras i LosWriter klassen; en intern klass som används av LosFormatter Ordförande för att faktiskt göra objektet serialisering ... den använder följande kod för att göra detta (tack än en gång till den oumbärliga Reflektor) :
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);
}
Som du förmodligen kan se hanterar denna kod applikationen av MAC- nyckeln och krypteringen till den seriella datan. Det här är koden som används av 'MachineKey' för att utföra krypteringen:
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;
}
Tyvärr betyder detta att jag antingen måste spela om med reflektion / dumpa källan från Refelector / helt återuppfinna hur detta fungerar för att gå mycket längre med min ViewState tinkering, Gud det skulle ha varit trevligt om detta saker gjordes med en fabrik ursprungligen ... gissade de inte trodde att någon skulle vara galen nog att vilja spela med det ...:-)
Jag kommer till slut att behöva relent och faktiskt skriva en artikel en av dessa dagar ... problem för mig är att strukturera saken så att den är läsbar för icke-obsessiva människor ...
© 2026 Scott Galloway — Unlicense — All content and source code on this site is free to use, copy, modify, and sell.