Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
63
Task/RSA-code/Perl/rsa-code.pl
Normal file
63
Task/RSA-code/Perl/rsa-code.pl
Normal file
|
|
@ -0,0 +1,63 @@
|
|||
use bigint;
|
||||
|
||||
$n = 9516311845790656153499716760847001433441357;
|
||||
$e = 65537;
|
||||
$d = 5617843187844953170308463622230283376298685;
|
||||
|
||||
package Message {
|
||||
my @alphabet;
|
||||
push @alphabet, $_ for 'A' .. 'Z', ' ';
|
||||
my $rad = +@alphabet;
|
||||
$code{$alphabet[$_]} = $_ for 0..$rad-1;
|
||||
|
||||
sub encode {
|
||||
my($t) = @_;
|
||||
my $cnt = my $sum = 0;
|
||||
for (split '', reverse $t) {
|
||||
$sum += $code{$_} * $rad**$cnt;
|
||||
$cnt++;
|
||||
}
|
||||
$sum;
|
||||
}
|
||||
|
||||
sub decode {
|
||||
my($n) = @_;
|
||||
my(@i);
|
||||
while () {
|
||||
push @i, $n % $rad;
|
||||
last if $n < $rad;
|
||||
$n = int $n / $rad;
|
||||
}
|
||||
reverse join '', @alphabet[@i];
|
||||
}
|
||||
|
||||
sub expmod {
|
||||
my($a, $b, $n) = @_;
|
||||
my $c = 1;
|
||||
do {
|
||||
($c *= $a) %= $n if $b % 2;
|
||||
($a *= $a) %= $n;
|
||||
} while ($b = int $b/2);
|
||||
$c;
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
my $secret_message = "ROSETTA CODE";
|
||||
|
||||
$numeric_message = Message::encode $secret_message;
|
||||
$numeric_cipher = Message::expmod $numeric_message, $e, $n;
|
||||
$text_cipher = Message::decode $numeric_cipher;
|
||||
$numeric_cipher2 = Message::encode $text_cipher;
|
||||
$numeric_message2 = Message::expmod $numeric_cipher2, $d, $n;
|
||||
$secret_message2 = Message::decode $numeric_message2;
|
||||
|
||||
print <<"EOT";
|
||||
Secret message is $secret_message
|
||||
Secret message in integer form is $numeric_message
|
||||
After exponentiation with public exponent we get: $numeric_cipher
|
||||
This turns into the string $text_cipher
|
||||
If we re-encode it in integer form we get $numeric_cipher2
|
||||
After exponentiation with SECRET exponent we get: $numeric_message2
|
||||
This turns into the string $secret_message2
|
||||
EOT
|
||||
Loading…
Add table
Add a link
Reference in a new issue