Someone was asking for an easy way to encrypt single files. Here's what I use all the time. I call the program "gpp" (from GPg Pico). Read notes before using. Do not use on non-text files. If you want to encrypt non-text files just use gpg -c manually and delete the original files.
You may need to adjust the path to perl and bash, and possibly cp, but it should work as-is on any lsb linux system. Must have gpg installed, but I don't think anyone doesn't!
#!/usr/bin/perl -w # # v3.0 (c) Trevor Cordes; may be used & distributed freely
# use only on text files; # edit the $editor var to set to your favorite editor (vi, emacs, nano); # when first run on a text file, will encrypt it and delete original; # when used on encrypted files (ending in .gpg) will decrypt, load # into your editor, then re-encrypt once edited; # when dealing with encrypted files, makes a backup copy in /tmp which # it leaves there for safety; # note: when editing, the file exists in plaintext on the disk, so it's # not as nice/secure as an in-memory system would be during the edit; # note: backspace & arrows don't work when entering pw, so just ^C if # you make a typo; # relies on gpg's convention (-c) encryption, which is only as good as # your password so make it good/long depending on how secure you want # to be against brute force or dictionary attacks; # if you use emacs or an editor that automatically makes backup files, # you must disable that or use a simpler editor, otherwise you'll # leave plaintext file droppings everywhere;
$editor="/usr/bin/nano -t -z -w";
$ENV{SHELL}='/bin/bash';
$ef=shift; -f $ef or die "not a file: $ef";
if (($uf)=($ef=~/^(.+?)(.gpg)$/i)) {
-f $uf and die "plaintext file already exists, will not overwrite ($uf)";
$noslashesf=$ef; $noslashesf=~tr#/#_#;
$efexists=1;
} else {
$uf=$ef; $ef="$ef.gpg"; $efexists=0;
}
# get pw print "Enter password: "; system "stty",'-icanon','-echo','eol',"\001"; $SIG{'INT'}='cleanup';
do { $char=getc(STDIN); print '*' if $char ne "\n"; $pgppw.=$char; } until $char eq "\n"; print "\n"; system "stty",'icanon','echo','eol','^@'; $unsttyd=1;
if ($efexists) {
$baknum=0; $baknum++ while (-f "/tmp/$noslashesf.bak$baknum$$"); system "/bin/cp -p $ef /tmp/$noslashesf.bak$baknum$$";
open(PW,"| gpg --passphrase-fd 0 --batch $ef 2>/dev/null") or die; print PW $pgppw; close(PW);
die "bad password\n" if !-s $uf or (-s $uf)<(-s $ef)-100;
system "$editor $uf";
unlink $ef if -f $ef;
}
open(PW,"| gpg -c --passphrase-fd 0 -z9 --batch $uf >/dev/null 2>&1") or die; print PW $pgppw; close(PW);
-f $ef or die "encryptions seems to have failed, leaving plaintext as is ($uf)";
unlink $uf if -f $uf;
#system "ls -ld $uf*"; #print "\nLooks like success!\n";
&cleanup;
sub cleanup{ if (!$unsttyd) { system "stty",'icanon','echo','eol','^@'; print "\n"; } exit; }