Zum Inhalt springen

C# Anwendung für Konvertierung von gecrypteter Zeichenfolge


Empfohlene Beiträge

Geschrieben

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

Geschrieben

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;

}

}

}

Erstelle ein Benutzerkonto oder melde Dich an, um zu kommentieren

Du musst ein Benutzerkonto haben, um einen Kommentar verfassen zu können

Benutzerkonto erstellen

Neues Benutzerkonto für unsere Community erstellen. Es ist einfach!

Neues Benutzerkonto erstellen

Anmelden

Du hast bereits ein Benutzerkonto? Melde Dich hier an.

Jetzt anmelden

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