GPG-Ausgabe direkt in ein Memo-Feld

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

GPG-Ausgabe direkt in ein Memo-Feld

Beitrag von Aliobaba »

Hallo,

es gelingt mir zwar, die "Meldungen" von GPG direkt in ein Memo-Feld schreiben zu lassen. Den ver- oder entschlüsselten Text kriege ich aber nur über den Umweg eines vorher auf die Festplatte geschriebenen Files in dieses Memo-Feld.

Das hier:

Code: Alles auswählen

//        Process1: TProcess;   (nicht lokal definiert)
  Process1 := TProcess.Create(nil);
  Process1.Options := Process1.Options + [poUsePipes];
  Process1.CommandLine:=  'gpg -h';
  Process1.Execute;
  Memo1.Lines.LoadFromStream(Process1.Output);
  Process1.Free;        
funktioniert :)

... aber wie kriege ich "GPG" dazu, auch den ver- oder entschlüsselten Text direkt und ohne den nicht so eleganten Umweg über ein vorher abgespeichertes und dann wieder eingelesenes File in das Memo-Feld zu schreiben?

Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: GPG-Ausgabe direkt in ein Memo-Feld

Beitrag von Socke »

Aliobaba hat geschrieben:... aber wie kriege ich "GPG" dazu, auch den ver- oder entschlüsselten Text direkt und ohne den nicht so eleganten Umweg über ein vorher abgespeichertes und dann wieder eingelesenes File in das Memo-Feld zu schreiben?
Bringe GPG dazu, den Text nach Stdout zu schreiben. Deinem TProcess fügst du die Option poWaitOnExit hinzu.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: GPG-Ausgabe direkt in ein Memo-Feld

Beitrag von Aliobaba »

Hallo Socke,

ich fand im Internet Beiträge, wie es gelingt stderr in stdout umzulenken:

http://www.hackerboard.de/linux-unix/29 ... i-gpg.html
'&>' sorgt dafür, daß alle Ausgaben (stderr und stdout) umgeleitet werden. Will man nur den stderr umleiten, macht man das mit '2>'.

Wenn es mir gelänge stdout in stderr umzuleiten, dann könnte es gehen - finde aber den Befehl nicht (vielleicht liege ich mit meiner Hoffnung aber ja auch falsch :? :?: )

Gruß
Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: GPG-Ausgabe direkt in ein Memo-Feld

Beitrag von Socke »

Aliobaba hat geschrieben:ich fand im Internet Beiträge, wie es gelingt stderr in stdout umzulenken:

http://www.hackerboard.de/linux-unix/29 ... i-gpg.html
'&>' sorgt dafür, daß alle Ausgaben (stderr und stdout) umgeleitet werden. Will man nur den stderr umleiten, macht man das mit '2>'.
Diese Methode geht nur in der Shell. Eigene Programme müssen das selbst machen.
Aliobaba hat geschrieben:Wenn es mir gelänge stdout in stderr umzuleiten, dann könnte es gehen - finde aber den Befehl nicht (vielleicht liege ich mit meiner Hoffnung aber ja auch falsch :? :?: )
Wenn GPG wirklich nach Stderr schreibt, kannst du mit TProcess direkt darauf zugreifen. Alternativ setzt du auch noch die Option poStderrToOutPut.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

wp_xyz
Beiträge: 5153
Registriert: Fr 8. Apr 2011, 09:01

Re: GPG-Ausgabe direkt in ein Memo-Feld

Beitrag von wp_xyz »

Ich hab's nicht ausprobiert, aber in http://www.gnupg.org/howtos/de/GPGMiniHowto.pdf, Seite 9, steht:
Das Kommando zum Entschlüsseln lautet
gpg [-d] [Datei]
oder
gpg [--decrypt] [Datei]
Auch hier gilt: Voreingestellt ist Ausgabe auf stdout, man kann aber mit der Option -o [Datei] in eine Datei ausgeben.
Das liest sich so, als ob man ohne einen explizit hinter -o angegebenen Dateinamen immer in die Standardausgabe schreibt. Wie socke schon erwähnt hat, musst du zusätzlich zu poUsePipses auch die Option poWaitOnExit setzen, sonst ist dein Prozess zu Ende, bevor gpg den Output geschrieben hat.

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: GPG-Ausgabe direkt in ein Memo-Feld

Beitrag von Aliobaba »

Hallo,
Socke hat geschrieben: Wenn GPG wirklich nach Stderr schreibt, kannst du mit TProcess direkt darauf zugreifen. Alternativ setzt du auch noch die Option poStderrToOutPut.
wp_xyz hat geschrieben: Das liest sich so, als ob man ohne einen explizit hinter -o angegebenen Dateinamen immer in die Standardausgabe schreibt. Wie socke schon erwähnt hat, musst du zusätzlich zu poUsePipses auch die Option poWaitOnExit setzen, sonst ist dein Prozess zu Ende, bevor gpg den Output geschrieben hat.
"poWaitOnExit" : habe ich gemacht; hier bleibt aber manchmal das DOS-Fenster offen. Wahrscheinlich ist dann eben der angestoßene Prozess nicht zu Ende. Ich muss dies nochmal gesondert analysieren. Aber das ist vorerst (noch) nicht das Problem.
Aber das:

Code: Alles auswählen

 Memo2.Text:='';
   Process1 := TProcess.Create(nil);
   Process1.Options :=  [poUsePipes ];
{                                  // folgende Zeilen werden zum Testen entsprechend angewendet
  gpg --passphrase qqqq -d Cry_ja.Txt
  gpg --passphrase qqqq -ca Cry_nein.txt
  Process1.Options := Process1.Options + [poUsePipes , poWaitOnExit ,  poStderrToOutPut ]; 
  Process1.Options := Process1.Options + [poUsePipes ,  poStderrToOutPut ];                         
}
  Process1.CommandLine:= Ed_Proc.Text;       // für freie Eingaben des GPG-Befehls (=Edit-Feld: Ed_Proc)
  Process1.Execute;
  Memo2.Lines.LoadFromStream(Process1.Output);
  Process1.Free;
 
Zur Erklärung: Cry_ja.Txt ist ein verschlüsselter Text, Cry_nein.txt ein Unverschlüsselter.

Gebe ich in das Feld "Ed_Proc.Text" diesen Befehl ein: "gpg --passphrase qqqq -d Cry_ja.Txt", dann erscheint der entschlüsselte Text wie gewünscht im Memo-Feld. (auch ohne "poWaitOnExit") Also alles bestens!

Gebe ich aber diesen Befehl ein: "gpg --passphrase qqqq -ca Cry_nein.txt", so wird "hartnäckig" dieses Textfile verschlüsselt und in die Datei "Cry_nein.txt.asc" auf die Festplatte geschrieben. Ich hätte die Ausgabe aber auch gerne im Memo-Feld. :?:

Kann man dieses Verhalten "GPG" irgendwie "abgewöhnen"?

Aliobaba
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Socke
Lazarusforum e. V.
Beiträge: 3178
Registriert: Di 22. Jul 2008, 19:27
OS, Lazarus, FPC: Lazarus: SVN; FPC: svn; Win 10/Linux/Raspbian/openSUSE
CPU-Target: 32bit x86 armhf
Wohnort: Köln
Kontaktdaten:

Re: GPG-Ausgabe direkt in ein Memo-Feld

Beitrag von Socke »

Aliobaba hat geschrieben:Kann man dieses Verhalten "GPG" irgendwie "abgewöhnen"?

Code: Alles auswählen

gpg --help
man gpg
Alternativ liest du die Datei ein und übergibst sie per TProcess an gpg.
MfG Socke
Ein Gedicht braucht keinen Reim//Ich pack’ hier trotzdem einen rein

Aliobaba
Lazarusforum e. V.
Beiträge: 496
Registriert: Di 1. Mai 2012, 09:11

Re: GPG-Ausgabe direkt in ein Memo-Feld

Beitrag von Aliobaba »

Socke hat geschrieben:Alternativ liest du die Datei ein und übergibst sie per TProcess an gpg.
Hallo,

es macht ja auch keinerlei Probleme, den unverschlüsselten Text eines Memo-Feldes per gpg zunächst in eine Datei auf die Festplatte zu schreiben, dann den Text "ganz normal" per gpg zu verschlüsseln um ihn dann erneut in verschlüsselter Form als File auf die Festplatte zu schreiben und dann von diesem verschlüsselten Festplatten-File den Text in verschlüsselter Form wieder in das Memo-Feld zu schreiben.

Auch umgekehrt funktioniert dieser Vorgang mit dem Umweg über die Festplatte natürlich ganz problemlos.

Elegant erscheint mir das aber nicht. Diesen Umweg über die Festplatte möchte ich ja grad NICHT!

Und jetzt bin ich immerhin schon so weit, dass der verschlüsselte Text (allerdings auf der Festplatte) ohne erneuten "Umweg" über die Festplatte entschlüsselt DIREKT in das Memo-Feld geschrieben wird.

Was nicht funktioniert ist, dass ein auf der Festplatte vorhandenes unverschlüsseltes Text-File (zunächst) von der Festplatte DIREKT ins Memo-Feld geschrieben wird (Obwohl sich die beiden gpg-Befehle des Ver- und des Entschlüsselns sehr ähneln. (sh oben)

Aliobaba

Das endgültige Ziel wäre das:

funktionierende aktuelle Situation:
Memo_Text_unverschlüsselt -> Speicherung auf Festplatte -> Festplatten_Text_unverschlüsselt
Festplatten_Text_unverschlüsselt -> gpg -> Festplatten_Text_verschlüsselt
Festplatten_Text_verschlüsselt -> Schreiben in Memo -> Memo_Text_verschlüsselt
 
Memo_Text_verschlüsselt -> Speicherung auf Festplatte -> Festplatten_Text_verschlüsselt
Festplatten_Text_verschlüsselt -> gpg -> Festplatten_Text_unverschlüsselt
Festplatten_Text_unverschlüsselt -> Schreiben in Memo -> Memo_Text_unverschlüsselt

erste Verbesserung auf Grund der Tips hier:
Memo_Text_unverschlüsselt -> Speicherung auf Festplatte -> Festplatten_Text_unverschlüsselt
Festplatten_Text_unverschlüsselt -> gpg -> Festplatten_Text_verschlüsselt
Festplatten_Text_verschlüsselt -> Schreiben in Memo -> Memo_Text_verschlüsselt
 
Memo_Text_verschlüsselt -> Speicherung auf Festplatte -> Festplatten_Text_verschlüsselt
Festplatten_Text_verschlüsselt -> gpg -> Memo_Text_unverschlüsselt // bin schon recht zufrieden, dass dies schon funktioniert
// Zwischenschritt über die Festplatte fällt also bereits weg

 
Wunschziel:
Memo_Text_unverschlüsselt -> gpg -> Memo_Text_verschlüsselt

Memo_Text_verschlüsselt -> gpg -> Memo_Text_unverschlüsselt
"MyMemoryDB" ( https://www.heise.de/download/product/mymemorydb-89626 )

Antworten