I have added some comments and changed it to encode/decode complete records i.e. all the data.
#!perl
use strict;
use ST2614;
my $key = $ARGV[1] || 'secretkey';
my %HoA=();
# open file to read
open IN, '<','passmgr.dat'
or die ("The file cannot be opened!");
# read records line at a time
while (<IN>){
chomp; # remove carriage return/line feed
# decode record
my $record = ST2614::decode($_, $key);
# split records into fields on tab
my ($sitename,$id,$password,$url) = split "\t",$record;
# build hash of arrays
$HoA{$sitename} = [$id,$password,$url];
# print "$sitename $id $password $url\n";
}
# open file to write
open OUT, '>','passmgr.dat'
or die ("The file cannot be opened!");
# loop through HOA using key to extract values from array
for my $sitename (sort keys %HoA){
my $id = $HoA{$sitename}[0];
my $password = $HoA{$sitename}[1];
my $url = $HoA{$sitename}[2];
# build a record of fields seperated with tab
my $record = join "\t",$sitename,$id,$password,$url;
# store as encoded value
print OUT ST2614::encode($record,$key)."\n";
}
hope this helps
poj |