Hello,
I am trying to encrypt a string using a predetermined encryption map. I know that this a very very weak form of encryption, yet that is not the real problem. I think that this working code is too long and ugly to be efficient. Can anyone suggest a way to reduce the lines of code and also make the code more efficient?
Thanks
jcr
===========================================================
sub encrypt {
my ($self, $STRING) = @_;
my $ENCRYPTED_STRING = '';
my $LENGTH = length($STRING);
my @STRING = split(//,$STRING);
my $ENCRYPTION_MAP = "abcdefghijklmNOPQRSTUVWXYZABCDEFGHIJKLMnopqrstuvwxyz0123456789.&@=";
my @ENCRYPTION_ARRAY = split(//,$ENCRYPTION_MAP);
my $MAP_LENGTH = length($ENCRYPTION_MAP);
my $MAP_HALF = length($ENCRYPTION_MAP)/2;
for ($i=0; $i < $LENGTH; $i++) {
my $CHARACTER = $STRING
$i;
my $POSITION = index($ENCRYPTION_MAP, "$CHARACTER");
if ($POSITION < 0) {
$ENCRYPTED_STRING .= &EscapeCharacter("$CHARACTER");
}
else {
$ENCRYPTED_STRING .= &EscapeCharacter("$ENCRYPTION_ARRAY
($POSITION + $MAP_HALF) % $MAP_LENGTH");
}
}
return $ENCRYPTED_STRING;
}
##################################
# CHARACTER ESCAPING SUBROUTINE: #
##################################
sub EscapeCharacter {
my $CHARACTER_TO_ESCAPE = shift;
if (($CHARACTER_TO_ESCAPE eq '&')
|| ($CHARACTER_TO_ESCAPE eq '\\')
|| ($CHARACTER_TO_ESCAPE eq ' ')
|| ($CHARACTER_TO_ESCAPE eq '%')
|| ($CHARACTER_TO_ESCAPE eq '@')
|| ($CHARACTER_TO_ESCAPE eq '/')
|| ($CHARACTER_TO_ESCAPE eq '#')
|| ($CHARACTER_TO_ESCAPE eq '=')
|| ($CHARACTER_TO_ESCAPE eq '"')
|| ($CHARACTER_TO_ESCAPE eq "'")
|| ($CHARACTER_TO_ESCAPE eq '+')
|| ($CHARACTER_TO_ESCAPE eq '|')
|| ($CHARACTER_TO_ESCAPE eq '?')){
$CHARACTER_TO_ESCAPE = ord("$CHARACTER_TO_ESCAPE");
$CHARACTER_TO_ESCAPE = sprintf "%x", $CHARACTER_TO_ESCAPE;
return ".$CHARACTER_TO_ESCAPE";
}
else {return $CHARACTER_TO_ESCAPE;}
}