![]() |
Re: VerschlüsselungsProgramm
Zitat:
Als Stütze benutze ich heutzutage eine kleine Matrix (aus den oberen Buchstaben werden die unteren und umgekert) ABCDEFGHIJKLM NOPQRSTUVWXYZ 01234 56789 ---------------- Folgende Verschlüsselung ist auch nicht schlecht. Damit dürften wohl unsere ausländischen Freunde die meisten Probleme haben. Zitat:
|
Re: VerschlüsselungsProgramm
Zitat:
edit: das pack ich mir gleich in meine signatur (zumindest in dem forum, wo die so lang sein dürfen :D ) Aenogym |
Re: VerschlüsselungsProgramm
Erstens ist das schon ein alter Hut und zweitens hat das nun gar nichts mehr mit Verschlüsselung zu tun. :warn:
|
Re: VerschlüsselungsProgramm
Zitat:
und 2. doch, das ist eine Verschlüsselung!!! Und zwar eine "Transposition". :warn: Das Scherzprogramm (1. Beitrag in diesem Thread) ist auch eine "Transposition" !!! Im Wikipedia steht: Verschlüsselung nennt man den Vorgang, bei dem ein Klartext mit Hilfe eines Verschlüsselungsverfahrens (Algorithmus) in einen Geheimtext umgewandelt wird. Den umgekehrten Vorgang nennt man Entschlüsselung. Man unterscheidet 4 Verschlüsselungsarten: Transposition Bei einer Transposition werden die Zeichen untereinander vertauscht. Zum Beispiel wenn man ein Text rückwärts schreibt oder jeden 2. mit jedem 5. Buchstaben vertauscht. Substitution Bei der Substitution werden Zeichen durch andere ersetzt. Zum Beispiel können alle Buchstaben durch Zahlen ersetzt werden. Chiffrierung Bei der Chiffrierung werden alle Zeichen einzeln anhand eines Verschlüsselungsverfahrens verschlüsselt. Beispiel hierfür ist die Cesar Verschlüsselung bei welcher ein Zeichen aus dem Alphabet als Schlüssel verwendet wird und anhand der Position des Buchstabens im Alphabet die Buchstaben des Klartextes zyklisch verschoben werden. Codierung Beim Codieren werden alle Zeichen eines Zeichenvorrats einem anderen Zeichenvorrat zugeordnet. Ein Beispiel hierfür ist die codierung aller Alphabetischen Zeichen in den ASCII Code. [edit]hier der Link zum Wikipedia: ![]() [edit]noch ein Link: ![]() |
Re: VerschlüsselungsProgramm
Zitat:
Weiter so Jungs :wink: |
Re: VerschlüsselungsProgramm
Für Fetischisten der Objectorientierung :zwinker: habe ich versucht, das ganze mal in zwei Klassen zu Kapseln:
Delphi-Quellcode:
Natürlich ergibt sich dadurch ein gewisser Overhead, ich hoffe aber trotzdem was beigetragen zu haben. Insbesondere bei Random wäre super, wenn jemand die Gleichwertigkeit verifizieren könnte.
unit rc4;
// Code written by Hagen ([url]http://www.delphipraxis.net/topic12881,15.html[/url]) // unit created by maximov 29.07.2004 // Encapsulation in Class papillon03 5.11.2004 interface type TCryptBytes = array[Byte] of Byte; TtrRC4Crypt = class(TObject) private FcBytes: TCryptBytes; FcI, FcJ: Byte; public constructor Create; destructor Destroy; override; procedure Init(const Key: string); procedure CodeBytes(const Source; var Dest; Count: Integer); function Code(const Value: string): string; function CodeOnce(const Value, Password: String): string; procedure SelfEncryptByteArray; procedure Clear; property CryptBytes: TCryptBytes read FcBytes; end; TtrRC4Random = class(TObject) private Frc4crypt: TtrRC4Crypt; public constructor Create; destructor Destroy; override; function Random: Cardinal; end; implementation type PByteArray = ^TByteArray; TByteArray = array[0..($FFFF shr 1)-1] of byte; function TtrRC4Crypt.Code(const Value: string): string; var Count: Integer; begin Count := Length(Value); SetLength(Result, Count); CodeBytes(Value[1], Result[1], Count); end; function TtrRC4Crypt.CodeOnce(const Value, Password: string): string; begin Init(Password); try Result := Code(Value); finally Clear; end; end; procedure TtrRC4Crypt.Init(const Key: String); var r,s,t,k: Byte; u,l: Integer; begin l := Length(Key); FcI := 0; FcJ := 0; for s := 0 to 255 do FcBytes[s] := s; r := 0; u := 0; for s := 0 to 255 do begin if u < l then k := PByteArray(Key)[u] else k := 0; Inc(u); if u >= l then u := 0; Inc(r, FcBytes[s] + k); t := FcBytes[s]; FcBytes[s] := FcBytes[r]; FcBytes[r] := t; end; end; procedure TtrRC4Crypt.CodeBytes(const Source; var Dest; Count: Integer); var s: Integer; t: Byte; begin for s := 0 to Count -1 do begin Inc(FcI); t := FcBytes[FcI]; Inc(FcJ, t); FcBytes[FcI] := FcBytes[FcJ]; FcBytes[FcJ] := t; Inc(t, FcBytes[FcI]); TByteArray(Dest)[s] := TByteArray(Source)[s] xor FcBytes[t]; end; end; procedure TtrRC4Crypt.Clear; begin FillChar(FcBytes, SizeOf(FcBytes), 0); FcI := 0; FcJ := 0; end; constructor TtrRC4Crypt.Create; begin end; destructor TtrRC4Crypt.Destroy; begin Clear; inherited; end; procedure TtrRC4Crypt.SelfEncryptByteArray; begin CodeBytes(FcBytes, FcBytes, SizeOf(FcBytes)); end; constructor TtrRC4Random.Create; begin inherited; Frc4crypt := TtrRC4Crypt.Create; with Frc4crypt do begin Init('5C103319-9C6F-4F88-BBDC-752779958047'); end; end; destructor TtrRC4Random.Destroy; begin Frc4crypt.Free; inherited; end; function TtrRC4Random.Random: Cardinal; type PRC4Cast = ^TRC4Cast; TRC4Cast = record FirstSBOX: Cardinal; end; begin // verschlüssele die dynamsiche SBOX von RC4Random.D mit sich selber und gebe die 4 ersten Bytes // als Zufallswert zurück !! with Frc4crypt do begin SelfEncryptByteArray; Result := PRC4Cast(@CryptBytes).FirstSBOX; end; end; end. Ciao Papillon03 |
Re: VerschlüsselungsProgramm
Zitat:
PS: Willkommen in der DP :dp: |
Re: VerschlüsselungsProgramm
Man kann einen Text auch in einzelne Zeichen zerlegen und dann in AscII-Code umwandeln. Danach noch evt den Ascii-Code mit einer Formel (z.B.: Ascii-code*2+100) oder so bearbeiten. Zum entschlüsseln dann einfach Codiertes-Zeichen-100:2. Allerdings muss man zwischen jedes Zeichen ein Trennzeichen z.B: ; setzen. So hab ich des mal gemacht. Des funktioniert einwandfrei.
Was meint ihr, wie sicher das ist?? //edit: Vpu xnaa nhpu Ebg68! |
Re: VerschlüsselungsProgramm
Nicht sehr sicher. Eine einfache Häufigkeitsanalyse sollte reichen, um den Code zu knacken.
|
Re: VerschlüsselungsProgramm
Zitat:
Nachfolgende Random Funktion ist sogar noch besser und schneller und liefert den Perfekten Durchschnitt von 0.5 !!
Delphi-Quellcode:
Schön, als Demonstration zeigt dies das zur Beurteilung eines Zufallsgenerators eben nicht nur eine Durchschnittsstatistik ausreicht.
var
Counter: Byte = 0; function BestRandom: Boolean; begin Result := Odd(Counter); Inc(Counter); end; Bei der grafischen Analyse der LCG Algorithmen == Delphi Random(), wird man feststellen das sich in den grafischen Bildern starke sich wiederholende Artefakte ergeben. D.h. LCG's sind keineswegs gute Zufallsgeneratoren, sie reichen gerademal für Statistische Berechnungen aus. Im Gegensatz dazu würde obige RC4 basierte Funktion ein grafisches Bild ergeben das ein Weises Rauschen darstellt, also absolut keine Regelmäßigkeiten enthält. Gruß Hagen |
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:21 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 by Thomas Breitkreuz