Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

C# Anwendung für Konvertierung von gecrypteter Zeichenfolge

Empfohlene Antworten

Veröffentlicht

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

  • Autor

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;

}

}

}

Archiv

Dieses Thema wurde archiviert und kann nicht mehr beantwortet werden.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.