![]() |
Text verschlüsseln Windows + Android
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?) ![]()
Delphi-Quellcode:
ich öffne / speichere es dann so:
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; 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); |
AW: Text verschlüsseln Windows + Android
Hallo,
schau' dir doch mal die DEC an, ist zwar offiziell noch Alpha Status, funktioniert aber und das auch unter Android. Kommt mit ettlichen Unit Tests so diass das Funktionieren auch einigermaßen abgesichert ist. Außerdem sind inzwischen auch mehrere Demo Programme, für Konsole und FMX basiert dabei. Die Hash und Verschlüsselungsdemos sind auch auf Google Play als "DEC hash demo" und "DEC cipher demo" zu finden und die hash demo ist auch schon in 64-bit kompatibler Fassung in Google Play. Herunterladen kann man es hier und es enthält auch ein englisches PDF manual: ![]() |
AW: Text verschlüsseln Windows + Android
Ohh vielen dank. ich werds mal versuchen... aber ich ziemlicher delphi noob ;)
Wie installier ich das? komponente installieren? oder die daten ins delphi verzeichniss kopieren? |
AW: Text verschlüsseln Windows + Android
Liegt da keine Readme bei, in der das steht? Früher müsste man nur die Units ins Projekt einbinden. Die IDE muss sie also nur finden können.
|
AW: Text verschlüsseln Windows + Android
Ganz, ganz wichtiger Unterschied in der String-Nutzung zwischen Windows/MacOS und iOS/Android:
Bei iOS und Android gilt string[0..len-1] und bei Windows/MacOS string[1..len]! Ganz unten an der Basis und dann so unterschiedlich, kann nicht sagen, warum dies so ist.
Code:
unit Crypt;
interface uses SysUtils, FMX.Dialogs; function Encrypt (const s: String; Key: Word) : string; function Decrypt (const s: string; Key: Word) : string; implementation const CKEY1 = 53761; CKEY2 = 32618; function Encrypt(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 Decrypt(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 {$IF Defined(ANDROID) or Defined(IOS)} RStrB[i div 2]:= StrToInt('$' + tmpStr[i-1] + tmpStr[i]); {$ELSE} RStrB[i div 2]:= StrToInt('$' + tmpStr[i] + tmpStr[i+1]); {$ENDIF} 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:=UTF8ToString(RStr); end; end. |
AW: Text verschlüsseln Windows + Android
Schau doch mal bei den Beispielen vom cn-pack
![]() und auch ein Beispiel mit RSA sowohl für VCL als auch für FMX. DEC ist natürlich auch sehr gut. |
AW: Text verschlüsseln Windows + Android
Zitat:
Und ja: die IDE muss die Units nur finden. |
AW: Text verschlüsseln Windows + Android
Zitat:
Einsteigern/Umsteigern leichter wäre. Darüber kann man sich jetzt streiten. |
AW: Text verschlüsseln Windows + Android
Aber wäre es nicht auch interessant den Code für beide Plattformen zum Laufen zu bringen?
|
AW: Text verschlüsseln Windows + Android
Genau dies habe ich doch in meinem Kommentar getan. Dort steht der Code, der sowohl für Desktop als auch für Mobile läuft, indem ein {$IFDEF-Part hinzukam, der die Ungleichheit "angleicht".
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 02:40 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz