Delphi-PRAXiS
Seite 1 von 2  1 2   

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Win32/Win64 API (native code) (https://www.delphipraxis.net/17-win32-win64-api-native-code/)
-   -   Text verschlüsseln Windows + Android (https://www.delphipraxis.net/203099-text-verschluesseln-windows-android.html)

gee21 13. Jan 2020 18:27

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

TurboMagic 13. Jan 2020 18:45

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:

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

gee21 13. Jan 2020 18:55

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?

Luckie 13. Jan 2020 21:52

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.

philipp.hofmann 13. Jan 2020 21:52

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.

EdAdvokat 14. Jan 2020 13:32

AW: Text verschlüsseln Windows + Android
 
Schau doch mal bei den Beispielen vom cn-pack http://www.cnpack.org/index.php?lang=en vorbei. Dort findest Du Beispiele mit einer AES-Verschlüsselung
und auch ein Beispiel mit RSA sowohl für VCL als auch für FMX. DEC ist natürlich auch sehr gut.

TurboMagic 14. Jan 2020 20:46

AW: Text verschlüsseln Windows + Android
 
Zitat:

Zitat von Luckie (Beitrag 1455076)
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.

Im docs Ordner befindet sich eine mehrseitige englisch sprachige PDF Datei...
Und ja: die IDE muss die Units nur finden.

TurboMagic 14. Jan 2020 20:47

AW: Text verschlüsseln Windows + Android
 
Zitat:

Zitat von philipp.hofmann (Beitrag 1455077)
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.

EMBT meinte, dass die mehrzahl aller Programmiersprachen 0-basiert wäre und es durch diese Änderung
Einsteigern/Umsteigern leichter wäre. Darüber kann man sich jetzt streiten.

Luckie 14. Jan 2020 22:22

AW: Text verschlüsseln Windows + Android
 
Aber wäre es nicht auch interessant den Code für beide Plattformen zum Laufen zu bringen?

philipp.hofmann 14. Jan 2020 22:38

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 18:07 Uhr.
Seite 1 von 2  1 2   

Powered by vBulletin® Copyright ©2000 - 2020, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2020 by Daniel R. Wolf