Zum Inhalt springen

C# Anwendung für Konvertierung von gecrypteter Zeichenfolge


ytmfb

Empfohlene Beiträge

Hallo Leute,

ich schlage mich seid einem längerem Zeitraum mit einem Problem rum. Der Ursprung ist SharePoint, allerdings hat dieser in dem Kontext keine weitere Bedeutung.

Tatbestand:

Ich arbeite mit Visual Studio 2010, die Programmiersprache ist C#.

Framework : .NET 4.0

SharePoint Server : 2010

Dieser Code ist komprimiert, meine Aufgabe ist ihn zu dekomprimieren und das in einer kleinen C# Anwendung umzusetzen.

0xA8A930310C000000A9240000789CD55AEB6EDBC8157E1555688B04D8B1867732B10D687DA95DD889613949B18B85319733D62414A992235F7691B7E963F4DFBE58CF48B2448A94E38D94A685015B1C9E9939E79BF39DCBC88EBF43F1277268887F9CDD630DA9BC04D579C346B0D73DC8330399B97A18C3A9ECF6F667EF3BA7

Habe im netz einen Beitrag gefunden der genau diese Codes konvertieren soll.

Code gibt's hier : tCompressedString in SharePoint 2010 Content Database | Digitude

Leider hab ich dort keine registrieren Funktion gefunden um diese Person zu kontaktieren und der Download Link ist ebenfalls nicht mehr verfügbar.

Also habe ich den Code in einer eigenen Anwendung versucht umzusetzen, aber bei mir funktioniert nichts.

Gebe ein Byte Array mit diesen oben angegebenen Zahlen ein, der Code sieht so aus ( für die interessierten, können ja einfach mal die Zeilen kopieren und einfügen ) :

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.IO;

using System.IO.Compression;

namespace SPDecomp

{

class Program

{

static void Main(string[] args)

{

int i = 0;

const string code = "0xA8A930310C000000A9240000789CD55AEB6EDBC8157E1555688B04D8B1867732B10D687DA95DD889613949B18B85319733D62414A992235F7691B7E963F4DFBE58CF48B2448A94E38D94A685015B1C9E9939E79BF39DCBC88EBF43F1277268887F9CDD630DA9BC04D579C346B0D73DC8330399B97A18C3A9ECF6F667EF3BA7";

byte[] array = new byte[code.Length];

foreach (char c in code.ToArray())

{

array = byte.Parse(c.ToString(), System.Globalization.NumberStyles.HexNumber);

i++;

}

string result = Decompress(array);

}

static string Decompress(byte[] compressedBytesBuffer)

{

string uncompressedString = String.Empty;

using (MemoryStream compressedMemoryStream = new MemoryStream(compressedBytesBuffer))

{

compressedMemoryStream.Position += 12; // Compress Structure Header according to [MS -WSSFO2].

compressedMemoryStream.Position += 2; // Zlib header.

using (DeflateStream deflateStream = new DeflateStream(compressedMemoryStream, CompressionMode.Decompress))

{

using (MemoryStream uncompressedMemoryStream = new MemoryStream())

{

deflateStream.CopyTo(uncompressedMemoryStream);

uncompressedMemoryStream.Position = 0;

using (StreamReader streamReader = new StreamReader(uncompressedMemoryStream))

{

uncompressedString = streamReader.ReadToEnd();

}

}

}

}

return uncompressedString;

}

}

}

Wenn ich das 0x vorne an dem Code lasse weiß ich nicht wie ich die Zeichen der Methode mit übergeben soll da sich das x nicht in hexadezimal konvertieren lässt.

daher folgt die Fehlermeldung "Die Blocklänge entspricht nicht dem Komplement."

Wäre seeeehr verbunden wenn mir jemand dabei helfen könnte.

Gruß

YTMFB

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ok danke, hab die 0x jetzt weggelassen, der rest wird zumindest mal Byteweise aufgeschrieben, allerdings funktioniert das Decompress in diesem Kontext einfach nicht. Kompilieren ist kein Problem aber der Deflatestream lässt sich ja nicht beschreiben.

namespace SPConvert

{

class Program

{

static void Main(string[] args)

{

string hexadezimalcode = "0xA8A930310C000000A9240000789CD55AEB6EDBC8157E1555688B04D8B1867732B10D687DA95DD889613949B18B85319733D62414A992235F7691B7E963F4DFBE58CF48B2448A94E38D94A685015B1C9E9939E79BF39DCBC88EBF43F1277268887F9CDD630DA9BC04D579C346B0D73DC8330399B97A18C3A9ECF6F667EF3BA7";

byte[] byteArr = ParseHex(hexadezimalcode);

Decompress(byteArr);

}

public static byte[] ParseHex(string hexadezimalcode)

{

int offset = hexadezimalcode.StartsWith("0x") ? 2 : 0;

if ((hexadezimalcode.Length % 2) != 0)

{

throw new ArgumentException("Invalid length: " + hexadezimalcode.Length);

}

byte[] ret = new byte[(hexadezimalcode.Length - offset) / 2];

for (int i = 0; i < ret.Length; i++)

{

ret = (byte)((Parse4bit(hexadezimalcode[offset]) << 4)

| Parse4bit(hexadezimalcode[offset + 1]));

offset += 2;

}

return ret;

}

static int Parse4bit(char c)

{

if (c >= '0' && c <= '9')

{

return c - '0';

}

if (c >= 'A' && c <= 'F')

{

return c - 'A' + 10;

}

if (c >= 'a' && c <= 'f')

{

return c - 'a' + 10;

}

throw new ArgumentException("Invalid hex digit: " + c);

}

static string Decompress(byte[] compressedBytesBuffer)

{

string uncompressedString = String.Empty;

using (MemoryStream compressedMemoryStream = new MemoryStream(compressedBytesBuffer))

{

compressedMemoryStream.Position += 12; // Bedingung für den Algorithmus

compressedMemoryStream.Position += 2;

using (DeflateStream deflateStream = new DeflateStream(compressedMemoryStream, CompressionMode.Decompress))

{

using (MemoryStream uncompressedMemoryStream = new MemoryStream())

{

deflateStream.CopyTo(uncompressedMemoryStream);

uncompressedMemoryStream.Position = 0;

using (StreamReader streamReader = new StreamReader(uncompressedMemoryStream))

{

uncompressedString = streamReader.ReadToEnd();

}

}

}

}

Console.WriteLine(uncompressedString);

Console.ReadKey();

return uncompressedString;

}

}

}

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...