Actually, you're referring to symmetric keys. I'm talking about asymmetric keys where the passphrase is embedded in the private key.
I've since managed to get it working properly, although the ciphertext has to be directed into a file, and that file read back in to decrypt. I expect this is due to some incompatibility (or my ignorance of) the formatting types between the terminal and Perl's handling of scalars. I don't think this will be a problem once I output the data to a db table.
For archival sakes, here are the scripts I've used for testing of encrypt() and decrypt():
#!/usr/bin/perl
# gpg.pl
use Crypt::OpenPGP;
my $string = $ARGV[0];
my $pgp = Crypt::OpenPGP->new;
my $ciphertext = $pgp->encrypt(
Data => $string,
Recipients => 'Test User',
Armour => 1,
);
open(OUT, ">testfile");
print OUT $ciphertext, "\n";
close(OUT);
------------------------
#!/usr/bin/perl
# gupg.pl
use Crypt::OpenPGP;
my $pgp = Crypt::OpenPGP->new;
my ($plaintext) = $pgp->decrypt(
Filename => 'testfile',
Passphrase => 'password',
);
die "Decryption failed: ", $pgp->errstr unless $plaintext;
print $plaintext, "\n";
Update:
I've managed to test and verify that writes/reads to database also work. Here is the updated code using Data to read in the ciphertext:
#!/usr/bin/perl
# gpg.pl
use Crypt::OpenPGP;
use DBI;
my $string = $ARGV[0];
my $dbh = DBI->connect("DBI:mysql:pgpdb:localhost","user","password");
my $insert_stmt = 'insert into pgptable (card) values (?)';
my $sth = $dbh->prepare($insert_stmt);
my $pgp = Crypt::OpenPGP->new;
my $ciphertext = $pgp->encrypt(
Data => $string,
Recipients => 'Test User',
Armour => 1,
);
$sth->execute($ciphertext) || die $dbh->stderr;
-------------------------
#!/usr/bin/perl
# gupg.pl
use Crypt::OpenPGP;
use DBI;
my $dbh = DBI->connect("DBI:mysql:pgpdb:localhost","user","password");
my $select_query = 'select card from pgptable where id=?';
my $sth = $dbh->prepare($select_query);
my $pgp = Crypt::OpenPGP->new;
$sth->execute('1') || die $dbh->stderr;
my $data = ($sth->fetchrow_hashref)->{'card'};
my ($plaintext) = $pgp->decrypt(
Data => $data,
Passphrase => 'passphrase',
);
die "Decryption failed: ", $pgp->errstr unless $plaintext;
print $plaintext, "\n";
|