Программа в Perl шифрует штраф, но дешифрование выдает все 0. Почему это происходит? Я использовал тот же метод для шифрования/расшифровки строки.Мое дешифрование в Perl выходит все 0's
$string = "This is an encryption program"; # any length
$keystr = "948D5E5"; # length <= 8
print "original : ", $string, "\n";
$enc = hexcrypt($string, $keystr);
print "encrypted : ", $enc, "\n";
$dec = hexcrypt($enc, $keystr);
print "decrypted : ", $dec, "\n";
sub hexcrypt {
my (@pac, $pacstr, $l, $pac, $pacenc, $format, $pacencstr);
my @string = split(//, @_[0]); # the string to encrypt
my $keystr = @_[1]; # the key
my $key = hex($keystr); # the key in binary
my $keylength = length($keystr);
my $encstr = ""; # accumulator for returned string
do {
@pac = splice(@string, 0, $keylength); # take out a packet of digits (or less at end)
$pacstr = join("", @pac); # into a string
$l = length($pacstr);
$pac = hex($pacstr); # convert to a 32-bit integer
$pacenc = $pac^($key >> ($keylength * 4 - 4 * $l)); # shift key right if $l < $keylength, and XOR
$format = "%0" . sprintf("%.d", $l) . "X"; # we want the leading zeros
$pacencstr = sprintf($format, $pacenc); # back into a string
$encstr .= $pacencstr; # add to encrypted string
} while scalar @string > 0;
return $encstr;
}
@Beth; Вы уверены, что вы дешифруете, это похоже на второй проход шифрования. И что сказал Артджом, в строках 4 и 6. есть некоторые проблемы с цитированием и интервалом. –
Это была еще одна опечатка в строках 4 и 6. Если это второй пропуск шифрования, зачем ему приходилось все 0. – Beth
'$ format ="% 0 ". sprintf ("% .d", $ l). «X»; '- не должно быть' $ l * 2'? – tobyink