Advertisement
Guest User

onetimepadxor

a guest
Nov 1st, 2011
156
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Perl 1.35 KB | None | 0 0
  1. Encrypt:
  2.  
  3. #!/usr/bin/perl
  4.  
  5.  
  6. if(@ARGV == 0)
  7. {
  8.         print "Usage: $0 <num recipients>\n";
  9.         print "Creates a base 64 encoded set of encrypted data which when xor'ed together, produces the secret text\n";
  10.         exit 1;
  11. }
  12.  
  13. my $num_rec = shift @ARGV;
  14.  
  15. print "Enter secret: \n";
  16.  
  17. my $secret = <STDIN>;
  18.  
  19. my @secret = map { ord($_) } (split(//,$secret));
  20.  
  21. my @p1;
  22. my @p2 = @secret;
  23.  
  24. while($num_rec > 1)
  25. {
  26.    @p1 = @p2;
  27.    @p2 = gen_random(scalar @p1);
  28.    my @xor = xorit(\@p1,\@p2);
  29.    print encode(@xor)."\n";
  30.    $num_rec --;
  31. }
  32.  
  33. print encode(@p2)."\n";
  34.  
  35. sub gen_random
  36. {
  37.   my $l  = shift @_;
  38.  
  39.   my @a;
  40.  
  41.   while(--$l >= 0) { push @a, int(rand(256)); }
  42.  
  43.   @a;
  44. }
  45.  
  46. sub xorit
  47. {
  48.   my ($p1, $p2) = @_;
  49.   my @a;
  50.  
  51.   for(my $i = 0; $i < @$p1; $i++)
  52.   {
  53.       push @a, $p1->[$i] ^ $p2->[$i];
  54.   }
  55.  
  56.   return @a;
  57. }
  58.  
  59.  
  60. sub encode
  61. {
  62.     join(" ",@_);
  63. }
  64.  
  65. ------------
  66. Decrypt:
  67.  
  68. #!/usr/bin/perl
  69.  
  70. print "Enter code(s) and a blank line to stop\n";
  71.  
  72. while(1)
  73. {
  74.     my $d = <STDIN>;
  75.     if($d =~ /^\s*$/s)
  76.     {
  77.         last;
  78.     }
  79.    
  80.     $i = 0;
  81.  
  82.     while($d =~ /(\d+)/g)
  83.     {
  84.         $v[$i] = (int($v[$i]) ^ int($1));
  85.         $i++;
  86.     }
  87. }
  88.  
  89. print "\nAns\n";
  90. print join(" ", @v);
  91. print "\n";
  92. print map { if($_ > ord(' ') && $_ < ord('~') || $_ == ord("\n")) {chr($_)} else { '.';} } @v;
  93. print "\n";
  94.  
  95.  
  96.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement