Einzelnen Beitrag anzeigen

gee21

Registriert seit: 3. Jan 2013
199 Beiträge
 
Delphi 10.4 Sydney
 
#1

Text verschlüsseln Windows + Android

  Alt 13. Jan 2020, 19:27
Guten Abend

ich habe mal vor längerem eine code im internet gefunden der text verschlüsselt und entschlüsselt. (Ist nicht von mir)
auf windows10 funktioniert der nach wie vor. aber in android (firemonkey) krieg ich das nicht zum laufen.

ich schaffe es zwar den text auf android korrekt zu verschlüsseln. habe bei gleichem text / gleichem schlüssel die gleichen chifre wie auch dem pc.
aber beim entschlüsseln funktioniert es mit android nicht. der ausgabetext ist einfach leer.

Weiss jemand was man machen muss damit dieser code auf beiden Plattformen funktioniert? (Windows / Android)
oder hat jemand einen einfacheren / besseren code als dieser?


Damit RawByteString in android funktioniert habe ich dieses packet installert. (evt liegt auch hier das problem?)
https://github.com/delphilite/System.ByteStrings

Delphi-Quellcode:
const CKEY1 = 53761;
CKEY2 = 32618;

function EncryptStr(const S :String; Key: Word): String;
var i :Integer;
      RStr :RawByteString;
      RStrB :TBytes Absolute RStr;
begin
  Result:= '';
  RStr:= UTF8Encode(S);
  for i := 0 to Length(RStr)-1 do begin
    RStrB[i] := RStrB[i] xor (Key shr 8);
    Key := (RStrB[i] + Key) * CKEY1 + CKEY2;
  end;
  for i := 0 to Length(RStr)-1 do begin
    Result:= Result + IntToHex(RStrB[i], 2);
  end;
end;

function DecryptStr(const S: String; Key: Word): String;
var i, tmpKey :Integer;
      RStr :RawByteString;
      RStrB :TBytes Absolute RStr;
      tmpStr :string;
begin
  tmpStr:= UpperCase(S);
  SetLength(RStr, Length(tmpStr) div 2);
  i:= 1;
  try
    while (i < Length(tmpStr)) do begin
      RStrB[i div 2]:= StrToInt('$' + tmpStr[i] + tmpStr[i+1]);
      Inc(i, 2);
    end;
  except
    Result:= '';
    Exit;
  end;
  for i := 0 to Length(RStr)-1 do begin
    tmpKey:= RStrB[i];
    RStrB[i] := RStrB[i] xor (Key shr 8);
    Key := (tmpKey + Key) * CKEY1 + CKEY2;
  end;
  Result:= UTF8Decode(RStr);
end;
ich öffne / speichere es dann so:
die showmessages() habe ich nur zum testen da drin.

Delphi-Quellcode:
procedure jetztverschlüsselnundseichern;
var
i: integer;
begin
 pwdb.Clear;

 for I := 0 to pwdb2.Count-1 do pwdb.Add( EncryptStr(pwdb2.Strings[i], 223));

 pwdb.SaveToFile(GetHomePath + '/pwdb.txt');
 showmessage('gespeichert und verschlüsselt');
 end;
Delphi-Quellcode:
  
  pwdb.loadfromfile(GetHomePath + '/pwdb.txt');
  pwdb2.Clear;
    for I := 0 to pwdb.Count-1 do begin
     s:= DecryptStr(pwdb.Strings[i], 223);
     showmessage('before:'+pwdb.Strings[i]+' After:'+s);
     pwdb2.Add(s);
    end;
    showmessage('result nach entschlüsseln: '+ pwdb2.Text);
Robert

Geändert von gee21 (13. Jan 2020 um 19:47 Uhr)
  Mit Zitat antworten Zitat