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);