AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Entschlüsselung PHP / Delphi

Ein Thema von DerNutzer · begonnen am 15. Jul 2020 · letzter Beitrag vom 16. Jul 2020
Antwort Antwort
DerNutzer

Registriert seit: 14. Sep 2017
7 Beiträge
 
#1

Entschlüsselung PHP / Delphi

  Alt 15. Jul 2020, 11:23
Guten Tag,

ich habe gerade ein Problem wo ich nicht so richtig weiter komme, da ich nicht weiß, was ich tue.
Meine Aufgabe ist es, von einem Datenlogger die verschlüsselten Daten abzufragen und zu archivieren.

Und genau an der Verschlüsselung scheitere ich momentan.

Der Hersteller hat einen Pythoncode zur Verfügung gestellt um die Daten entschlüsseln zu können:

Code:
// originaler Herstellercode
==============================================================
def pad(data):
    length = 16 - (len(data) % 16)
    return data + chr(length)*length


def unpad(data):
    return data[:-ord(data[-1])]


def decodeMessage(msgb64):
    try:
        # first step decode base64
        msg = base64.b64decode(msgb64)

        # second step decode AES
        key = airqpass.encode('utf-8')
        if len(key) < 32:
            for i in range(32-len(key)):
                key += b'0'
        elif len(key) > 32:
            key = key[:32]
        cipher = AES.new(key=key, mode=AES.MODE_CBC, IV=msg[:16])
        return unpad(cipher.decrypt(msg[16:]).decode('utf-8'))
    except ValueError:
        return "Passwort falsch!"
    except Exception as e:
        print('Error - '+str(type(e))+' '+str(e))
Da ich jetzt kein ausgesprochener Verschlüsselungsexperte bin, habe ich ein wenig im Internet recheriert und verschiedene Lösungsansätze ausprobiert.
Der folgende Code schien mir noch am Sinnvollsten zu sein:

Code:
procedure Tform1.Decryption(str1 : ansistring);
var Cipher : TDCP_rijndael;
    Data, Key, IV : ansistring;
    index, dataLength, bsize, pad: integer;
begin

 data := DCPBase64.Base64DecodeStr(Str1);

  key := 'passwort';
  IV := copy(data,1,16);
  Data := copy(data,17,length(data));

  Cipher := TDCP_rijndael.Create(nil);
  try
    Cipher.Init(Key[1],128,@IV[1]);
    cipher.BlockSize := 16;
    //don't miss padding
    {start padding}
    dataLength := Length(Data);
    bsize := (Cipher.BlockSize div 8);
    pad := bsize - (dataLength mod bsize);
    for index := 1 to pad do
      Data := Data+chr(pad);
    {end padding}

    Cipher.decryptCBC(Data[1],Data[1],Length(Data));
  finally
    Cipher.Free;
  end;

  Memo_Plaintext.Lines.Add(Data);
end;
Leider kommt aber nie irgendein sinnvolles Ergebnis dabei heraus. Für Hilfestellungen bin ich echt dankbar, da ich schon eine geraume Zeit versuche dieses Problem zu lösen.
  Mit Zitat antworten Zitat
Benutzerbild von Sinspin
Sinspin

Registriert seit: 15. Sep 2008
Ort: Dubai
614 Beiträge
 
Delphi 10.3 Rio
 
#2

AW: Entschlüsselung PHP / Delphi

  Alt 15. Jul 2020, 12:36
Hallo,

hast Du es mit dem original Herstellercode geschafft eine Entschlüsselung durchzuführen? Wenn ja, zieh dir mal die Werte aus den ganzen einzelnen Schritten. Dann hast du was um zumindest ein Stück weiter testen zu können.
Da wird ein bestimmter AES Mode festgelegt. Den sollte deine Funktion dann auch verwenden.

Den Hersteller mal gefragt ob die nicht etwas in C/C++ haben, oder natürlich Delphi? Da könnte man sich zur Not eine Dll draus zimmern.
Stefan
Nur die Besten sterben jung
A constant is a constant until it change.
  Mit Zitat antworten Zitat
Benutzerbild von Sherlock
Sherlock

Registriert seit: 10. Jan 2006
Ort: Offenbach
3.762 Beiträge
 
Delphi 11 Alexandria
 
#3

AW: Entschlüsselung PHP / Delphi

  Alt 15. Jul 2020, 14:27
Python erklärt:
Ich gehe mal davon aus, daß die Python Standardbibliothek Crypto (https://pycryptodome.readthedocs.io/....html#cbc-mode) verwendet wurde.

Dann wird es einfach:
- Zu decodierende Nachricht aus Base64 in eine Bytefolge wandeln
- Wenn das Passwort nicht 32 Byte lang ist, den Rest mit 0 auffüllen
- Wenn das Passwort länger als 32 Zeichen ist, nur die ersten 32 Zeichen berücksichtigen
- Jetzt wird decodiert, die ersten 16 Zeichen sind der Initialisierungsvektor, der Rest ist die verschlüsselte Nachricht
- Der AES Modus ist CBC, und es muss nach dem Entschlüsseln noch Polstermaterial (Padding) entfernt werden.

Jetzt zu Delphi:
Leider kenne ich die von Dir verwendete Klasse nicht. Aber grundsätzlich scheinst Du Mit dem Padding arbeiten zu wollen, bevor überhaupt entschlüsselt wurde, das geht natürlich schief. Überhaupt scheinst Du eher Beispielcode zum Verschlüsseln kopiert zu haben. Schau nochmal nach, ob Du nicht etwas zum Entschlüsseln findest. Hier ist ein guter Start, denke ich: https://www.delphipraxis.net/1394543-post6.html

Sherlock
Oliver
Geändert von Sherlock (Morgen um 16:78 Uhr) Grund: Weil ich es kann
  Mit Zitat antworten Zitat
mytbo

Registriert seit: 8. Jan 2007
458 Beiträge
 
#4

AW: Entschlüsselung PHP / Delphi

  Alt 15. Jul 2020, 15:49
Wenn du schon einige Zeit gesucht und nichts Passendes gefunden hast, schaue dich mal hier um.

In der mORMot Unit SynCrypto.pas findest du z.B. die Klasse TAESCBC. In der Unit SynCommons.pas verschiedene Base64Toxxx Funktionen. In den Units SynEcc.pas aber vor allem in SynSelfTests.pas sind Beispiele, wie du die Klassen und Funktionen anwendest.

Bis bald...
Thomas
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.415 Beiträge
 
Delphi XE5 Professional
 
#5

AW: Entschlüsselung PHP / Delphi

  Alt 15. Jul 2020, 22:21
@derNutzer An welcher Stelle kommt PHP (Erwähnst du im Titel) zum Einsatz?
  Mit Zitat antworten Zitat
TurboMagic

Registriert seit: 28. Feb 2016
Ort: Nordost Baden-Württemberg
2.815 Beiträge
 
Delphi 12 Athens
 
#6

AW: Entschlüsselung PHP / Delphi

  Alt 15. Jul 2020, 22:25
In der DEC gibt's auch AES Code, Base64 Konvertierung über die Format Klassen
und ein einfaches Konsolen Demo Programm.
CBC Blockverkettungsmodus gibt's auch.

Zu finden hier:

https://github.com/winkelsdorf/Delph...tionCompendium

Im Unterordner docs ist auch eine Dokumentation.
  Mit Zitat antworten Zitat
DerNutzer

Registriert seit: 14. Sep 2017
7 Beiträge
 
#7

AW: Entschlüsselung PHP / Delphi

  Alt 16. Jul 2020, 06:46
Guten Morgen,

vielen Dank erstmal für die schnelle Hilfestellung.

@Sinspin : Leider haben die wohl nur den Pythoncode.

@Sherlock : Das ist doch mal ne Anleitung, mit der ich vielleicht was anfangen kann. Wie gesagt, Verschlüsselung ist nicht meines.

@mytbo : Danke. Da schaue ich mal rein.

@generic : Sorry ... mein Fehler. Sollte Python werden.

@TurboMagic : Vielen Dank. Da werde ich mich wohl mal durcharbeiten müssen.

Bin aber für weitere Ideen offen. Wünsche allen einen erfolgreichen Tag!
  Mit Zitat antworten Zitat
Antwort Antwort

 

Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:38 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz