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.