Περισσότερα για το ταξίδι μου στον υπέροχο κόσμο της ASP.NET 1.x ViewState
Έγραψα σε ένα Προηγούμενο post Ήθελα να κάνω ένα πόκερ γύρω μου. ΒΙΒΛΙΟ, μπορεί να επεκτείνει τα πράγματα που μου άρεσε' αναμένεται να γίνει σε συμπίεση στην κρυπτογράφηση και την υπογραφή κλπ. ΜSK2 ευχαρίστηση υπάρχει ΜSK3 αναφέρει καλά και κακά νέα για αυτό το σχέδιο . Φαίνεται ( αναμετρημένα MC6 ανακοινώθηκε ότι η MAC και τα στοιχεία κρυύπτου είναι πραγματικά επεξεργαστεί στη κατηγορία LosWriter MK7 αναμετρώνει μια εσωτερική κατηγορία που χρησιμοποιείται από Λοσφόρμα Για να κάνετε πραγματικά την serialization του αντικειμένου ...it χρησιμοποιεί τον ακόλουθο κώδικα για να το κάνει αυτό ΜSK1Thanks once again to the indispensable Αντανάκλαση) :
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);
}
Όπως μπορείτε πιθανώς να δείτε,Αυτός ο κωδικός χειρίζεται την εφαρμογή του κλειδιού MAC και την κρυπτογράφηση στα serialized δεδομένα.Αυτό είναι ο κώδικας που χρησιμοποιείται από το M SK2MachineKeyΜSK3 για την εκτέλεση της κρυψιμότητας
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;
}
Δυστυχώς για το , ίσως αυτό σημαίνει ότι θα έπρεπε να παίξει μαζί με την αντανάκλαση / μπορεί να σπάσει την πηγή από το Refelector ΜSK3 μπορεί να ανακαλύψει εντελώς πώς αυτό λειτουργεί για να πάει πολύ πιο μακριά με το ViewState τσιμπήματα για το ΜSK4 μπορεί ο θεός που θέλει' μπορεί να ήταν ωραίο εάν αυτά τα πράγματα έγιναν με ένα εργοστάσιο αρχικά γνωρίζει... μπορεί να πιστεύουν ότι όλοι θα είναι αρκετά βρώμικα για να θέλουν να παίξουν μαζί του.
Μου αρέσει το ' θα πρέπει τελικά να ανακουφιστεί και στην πραγματικότητα να γράψει ένα άρθρο μία από αυτές τις μέρες το ΜSK1 για μένα είναι η δομή του πράγματος, έτσι ώστε το ΜΚ2 μπορεί να διαβάζεται σε μη-ΜΚ3 δυσάρεστους ανθρώπους όπως το ΜΣΚ4