![]() |
XOR-Verschlüsselung
shmia hat mal eine kleine XOR-Verschlüsselung gepostet:
Delphi-Quellcode:
Eine XOR-Verschlüsselung ist nicht sehr sicher. Also nicht zu Empfehlen für sehr sensible Daten.
// 20.02.2003/shmia
function SimpleCryptString(const S, Key: string): string; var i, j: Integer; C: Byte; P: PByte; begin SetLength(Result, Length(S)); P := PByte(Result); j := 1; for i := 1 to Length(S) do begin C := Ord(S[i]); C := C xor Ord(Key[j]); P^ := C; Inc(P); Inc(j); if j > Length(Key) then j := 1; end; end; Weil bei obiger Routine auch nicht druckbare Zeichen herauskommen, empflieht shmia nach dem Verschlüsseln den Text noch umzuwandeln mit folgenden Funktionen:
Delphi-Quellcode:
{**************************************************************************
* NAME: StringToHexStr * DESC: Konvertiert einen String in eine hexadezimale Darstellung *************************************************************************} function StringToHexStr(const value:string):string; begin SetLength(Result, Length(value)*2); // es wird doppelter Platz benötigt if Length(value) > 0 then BinToHex(PChar(value), PChar(Result), Length(value)); end; {************************************************************************** * NAME: HexStrToString * DESC: Dekodiert einen hexadezimalen String *************************************************************************} function HexStrToString(const value:string):string; begin SetLength(Result, Length(value) div 2); // es wird halber Platz benötigt if Length(value) > 0 then HexToBin(PChar(value), PChar(Result), Length(value)); end; |
Re: XOR-Verschlüsselung
hamZta hat aus der XOR-Verschlüsselungsroutine eine ganze DLL geschrieben:
Delphi-Quellcode:
Der Originalbeitrag inkl. Diskussion ist
{ Dateiverschlüsselung, by hamZta }
{ - Zum Verschlüsseln CryptFile(datei, neuerName) verwenden } { - Zum Entschlüsseln DeCryptFile verwenden } { Verschlüsselt und Entschlüsselt 500 Dateien in 6 Sekunden } library dll2; uses SysUtils, Classes; {$R *.res} //Das Array in dem die Werte gespeichert sind var key: Array[1..6] Of Byte; function SetKey(k1,k2,k3,k4,k5,k6: Integer):integer; stdcall; begin //Alle Werte füllen key[1] := k1; key[2] := k2; key[3] := k3; key[4] := k4; key[5] := k5; key[6] := k6; end; //Funktion zum Verschüsseln einer Datei // oldFile: PChar = Die Datei die verschlüsselt werden soll // newFile: PChar = Der Name den die verschlüsselte Datei bekommen soll Function CryptFile(oldFile, newFile: PChar): integer; stdcall; var oFile, nFile: File of Byte; var cByte, currKey: Byte; var i: Integer; begin //Die neue Datei schreiben AssignFile(nFile, String(newFile)); ReWrite(nFile); //Die alte Datei öffnen AssignFile(oFile, String(oldFile)); Reset(oFile); //Hauptvorgang //Die ganze alte Datei durchgehen for i := 0 to FileSize(oFile)-1 do begin //Ein Byte auslesen Read(oFile,cByte); //Den aktuellen Keywert verändern currKey := currKey + 1; //Der Key ist nur 6stellig if currKey > 6 then currKey := 1; //Das Byte mithilfe von Xor und dem aktuellem Keywert verschlüsseln cByte := cByte Xor key[currKey]; //Und in die neue Datei schreiben Write(nFile,cByte); end; closefile(oFile); closefile(nFile); end; //Die Funktion DeCryptFile ist genau dieselbe Funktion wie CryptFile //(Existiert eigentlich nur der Übersicht halber :D) Function DeCryptFile(oldFile, newFile: PChar): integer; stdcall; var oFile, nFile: File of Byte; var cByte, currKey: Byte; var i: Integer; begin //Write new File AssignFile(nFile, String(newFile)); ReWrite(nFile); //Read old File AssignFile(oFile, String(oldFile)); Reset(oFile); //Hauptvorgang for i := 0 to FileSize(oFile)-1 do begin Read(oFile,cByte); currKey := currKey + 1; if currKey > 6 then currKey := 1; cByte := cByte Xor key[currKey]; Write(nFile,cByte); end; closefile(oFile); closefile(nFile); end; exports CryptFile name 'CryptFileA', DeCryptFile name 'DeCryptFileA', SetKey name 'SetKeyA'; begin end. ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 07:11 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