Algorithmus für Verschlüsselung von Texten

Für alles, was in den übrigen Lazarusthemen keinen Platz, aber mit Lazarus zutun hat.
MmVisual
Beiträge: 1466
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Algorhytmus für Verschlüsselung von Texten

Beitrag von MmVisual »

Ich habe mal einen "TextCoder" geschrieben, der den Text so ver- und entschlüsselt, dass man den immer noch lesen kann. Jedoch der PC hat damit Probleme. Damit kann man einfach seine Mails verschlüsseln und die gegenseite kann es noch lesen und der Text ist vor "automatischen Mail-Mitlesern" geschützt.

http://www.mikrocontroller.net/topic/322407#3509163

Ich habe mal enien" TdtxeeCor" gericsheebn, der den Text so ver- und eeülhtscnlsst, dass man den immer noch lseen
kann. Jocedh der PC hat dmait Pbomlere. Dimat kann man eafcinh siene Mlias vücessersllhn und die gsnieetege kann es
noch leesn und der Text ist vor" asttaeoihmucn Mail- Meliertsn" gtüsczhet.
EleLa - Elektronik Lagerverwaltung - www.elela.de

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 394
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Algorhytmus für Verschlüsselung von Texten

Beitrag von MitjaStachowiak »

Hast du mal daran gedacht, Unicode-Zeichen mit einfließen zu lassen, die den lateinischen Schriftzeichen ähnlich sehen?

Ich wollte schon immer mal einen Text-To-Sauklaue-Converter schreiben :mrgreen:

MmVisual
Beiträge: 1466
Registriert: Fr 10. Okt 2008, 23:54
OS, Lazarus, FPC: Winuxarm (L 3.0 FPC 3.2)
CPU-Target: 32/64Bit

Re: Algorhytmus für Verschlüsselung von Texten

Beitrag von MmVisual »

Ich habe auch schon mal daran gedacht. Ist ne heiden Arbeit die "passenden" Unicode Zeichen zu finden. Das ganze war mal kurz an einem Abend geschrieben, daher auch nur wenig Features. Das Problem bei den Unicode-Zeichen ist, dass die nicht von jedem System immer dargestellt werden.
Wenn Du daran weiter machen willst, kann ich Dir den Source mailen.
EleLa - Elektronik Lagerverwaltung - www.elela.de

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 394
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Algorhytmus für Verschlüsselung von Texten

Beitrag von MitjaStachowiak »

Naja, ich habe im Moment leider zu viel zu tun, um noch ein Projekt (wenn auch nur ein kleines) anzufangen... Dämliches Studium :x

Aber Danke.

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 394
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Algorhytmus für Verschlüsselung von Texten

Beitrag von MitjaStachowiak »

Ich muss dieses Thema noch mal eröffnen:

Hat hier jemand inzwischen einen Algorithmus, der eine Text-Datei (StringList) mit einem (relativ) kurzen Textpasswort ver- und entschlüsseln kann?

(Es geht darum: Ich habe für 'nen Kumpel, der jetzt auf Wanderschaft ist, einen USB-Stick fertig gemacht mit einem Truecrypt-Save 'drauf. Blöder weise kann man den nur mouten, wenn man das Adminpasswort des Rechners hat. Deswegen wollte ich alternativ noch einen rein textbasierten Save machen. Es muss nicht "hoch sicher" sein, denn wenn man den Save an einem fremden PC mountet und dieser PC infiziert ist, nützt "hoch sicher" auch nichts...)

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Algorhytmus für Verschlüsselung von Texten

Beitrag von Michl »

Ich hatte mir vor einem Monat auch ein Verschlüsselungsprogramm geschrieben, um Dateien mMn felsenfest (Zippen, Mit DCPCrypt -> Rijndael verschlüsselt -> mit x Dateien codiert) zu verschlüsseln. Kannst du dir ja mal anschauen (Windows 32/64 bit getestet).

Dazu müsste man allerdings vier Packages installieren (falls nicht schon installiert). Ich habe sie auch nochmal im Verzeichnis "Packages" beigefügt:
- LCLExtensions-Package
- VirtualStringTree-Package
- DCPcrypt-Package
- Defacer-Package

Limits:
- Unter Lazarus 1.4.2 werden Unicodezeichen in Dateinamen nicht erkannt. Unter 1.5 mit FPC 3.x einfach unter Projekteinstellung -> Compilereinstellungen -> Hinzufügen und Beeinflussen die Haken bei -dEnableUTF8RTL setzen und schon klappt das mit den Unicodezeichen.
- Bei 32 Bit ist die maximale Archivgröße auf ca. 1 GB begrenzt, da alle Dateien im Speicher gepackt und verschlüsselt werden. Bei 64bit gibt z.Zt. der RAM die maximale Größe vor (etwas weniger als die Hälfte des zur Verfügung stehenden Speichers kann zur Archiverstellung verwendet werden).
- alpha Status
- die Datei(en), mit denen man das Archiv codiert hat, sollte man nicht verlieren :wink:

Evtl. hilft es dir als Anregung?!
Dateianhänge
Defacer.zip
(718.04 KiB) 78-mal heruntergeladen

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 394
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Algorhytmus für Verschlüsselung von Texten

Beitrag von MitjaStachowiak »

Ich sehe es mir gerade an. Woher bekomme ich die DCPrijndael.pas?

Aber ein Problem, das ich an dieser Stelle gründlich lösen möchte, weil es mich beim nächsten Projekt wieder einholen wird, ist folgendes: AES benötigt einen relativ langen Schlüssel mit fester Länge. Ich brauche eine Funktion, die ein beliebig langes (eventuell auch empfindlich kurzes) Passwort auf den AES-Schlüssel abbildet.

Ich denke darüber nach, Wörterbuchattacken und BruteForce dadurch zu erschweren, dass diese Funktion extrem rechenintensiv ist. Besonders gut wäre es, wenn die Abbildung mit einem falschen Passwort statistisch sehr viel länger dauert: Mit jeder Abbildung wird ein Cache so verändert, dass die nächste Abbildung wieder verschieden rechenintensiv ist. Also mit dem richtigen Passwort und gegebener Rechenleistung dauert die Abbildung meistens zwischen 1 und 10 Sekunden, aber selten auch mal eine Minute, mit einem falschen Passwort dauert die Abbildung mindestens eine Minute. So lange muss man dann mindestens rechnen, um sicher zu sein, dass das getestete Passwort falsch ist.

Das ist nur so eine Idee und ich habe noch keinen Plan, wie man so einen Algorithmus realisieren kann...
Aber hat mal jemand davon gehört?

Michl
Beiträge: 2505
Registriert: Di 19. Jun 2012, 12:54

Re: Algorhytmus für Verschlüsselung von Texten

Beitrag von Michl »

MitjaStachowiak hat geschrieben:Woher bekomme ich die DCPrijndael.pas?
Diese ist Bestandteil vom Package DCPCrypt. Einfach Package installieren und dann sollte es gehen. Wenn nicht, dann ist das Package nicht mit dem Projekt verlinkt (hatte ich gestern eigentlich noch mal nachgeschaut, dass dies so ist) und du müsstest einfach vom Komponentenreiter ein TDCP_rijndael auf dem Formular platzieren und schon wird die Abhängigkeit vom Package DCPCrypt in das Projekt eingefügt (und somit die Pfade).

MitjaStachowiak hat geschrieben:Ich denke darüber nach, Wörterbuchattacken und BruteForce dadurch zu erschweren, dass diese Funktion extrem rechenintensiv ist.
Das ist der Grund, warum ich in einem weiteren Durchgang die schon verschlüsselte Datei nochmals mit einer/mehreren Datei/-en codiere. Nimmt man z.B. eine Datei mit von 1MB Größe, entspricht diese Datei einer Schlüssellänge von 1MB. Ich glaube nicht, dass sich jemand die Mühe macht, so eine Datei zu entschlüsseln, da immer drei zeitintensive Schritte nötig sind, um an das Original zu kommen (1. Decodieren, 2. Entschlüsseln, 3. Entpacken - und erst hier entscheidet sich, ob der Schlüssel passt).

Code: Alles auswählen

type
  TLiveSelection = (lsMoney, lsChilds, lsTime);
  TLive = Array[0..1] of TLiveSelection; 

MitjaStachowiak
Lazarusforum e. V.
Beiträge: 394
Registriert: Sa 15. Mai 2010, 13:46
CPU-Target: 64 bit
Kontaktdaten:

Re: Algorithmus für Verschlüsselung von Texten

Beitrag von MitjaStachowiak »

Hmm, etwas funktioniert noch nicht. Ich habe folgenden Code:

Code: Alles auswählen

 
 // Passworteingabe
 if (not InputQuery('Passwort', 'Passwort:', true, password)) then begin PostMessage(self.Handle, WM_CLOSE, 0, 0); exit; end;
 if (Length(password) < 6) then begin ShowMessage('Passwort zu kurz!'); PostMessage(self.Handle, WM_CLOSE, 0, 0); exit; end;
 // Verschlüsselung initialisieren
 crypt := TDCP_rijndael.Create(self);
 crypt.InitStr(password, TDCP_sha256);
 // Stream erstellen 
 m := TMemoryStream.Create;
 f := TFileStream.Create(documents + 'Safe.dat', fmCreate or fmOpenWrite);
 Memo1.Lines.SaveToStream(m);
 // Verschlüsseln
        { hat gefehlt }               m.Position := 0;
 crypt.EncryptStream(m, f, m.Size);
 // Freigeben
 m.Free;
 f.Free;
 crypt.Free;
 


Aber die Ausgabedatei bleibt immer leer :-( [Edit:] Halt, kleiner Fehler - die oben eingerückte Zeile hat gefehlt :roll: Jetzt dud's.

So, mal sehen, ob ich's auch wieder entschlüsseln kann :mrgreen: [Edit:] Jupp, geht nach dem selben Prinzip. Guter Tipp, Danke.
Das Thema mit dem zeitaufwändigen Hash ist wohl nicht so einfach...

Antworten