in reply to Math::XOR problem

Your link is somewhat broken. It only works if you have an account on that site.

I don't know Math::XOR, and I don't really see the need for it when Perl has a string xor operator.

# Assumes ASCII. $string1 = "@@@@@"; $string2 = "ABCDE"; $xored = $string1 ^ $string2; print($xored eq "\x01\x02\x03\x04\x05" ? "ok\n" : "not ok\n");

In practice: (Added)

my $repeats = (length($cipher_text) / length($pass)) + 1; my $pass_stream = substr($pass x $repeats, 0, length($cipher_text)); my $plain_text = $cipher_text ^ $pass_stream;

Also, I'm not sure why you aren't using a foreach loop.

foreach my $c1 ('a'..'z') { foreach my $c2 ('a'..'z') { foreach my $c3 ('a'..'z') { my $pass = $c1 . $c2 . $c3; ... }}}

Finally, @list[$count1] should be $list[$count1]. Use $ when you want a scalar (single element). Use @ when you want a list (multiple elements).

Replies are listed 'Best First'.
Re^2: Math::XOR problem
by ww (Archbishop) on Apr 08, 2007 at 01:13 UTC
    ...and speaking (? piling on ?) re ikegami's note re the link,
    kuratkull: Could you tell us, please, what the dickens "all lower caps" means, because what's echoing through my minds is that "lower (case) CAPITALS" is an oxymoron of the first order.

    "Small Caps" is a legit (ie, "meaningful") phrase, but isn't relevant in any way to your question (It's a designation for a font style with letters that look like conventional capital - upper case - letters, but are less tall). However, "small caps" is NOT a character-set in the meaning of your question.

      The phrase in the problem description was "lower case characters".

      I don't see the rationale in drolling over a first time poster (assumed non-native in English, judging by his profile) in this way.

Re^2: Math::XOR problem
by kuratkull (Acolyte) on Apr 07, 2007 at 23:40 UTC
    Thank you mate for helping, this helped me a lot and this helped me closer to completing my task :)
    I implemented your method, and then instantly googled it, so now im familiar with it; I just couldn't find an implemented operator for dealing with XOR, sorry, I new :)

    PS! I didn't use the foreach loop:
    NB! The code is using "while" because it worked even less with "foreach" loops(it only read the first letter). Thanks!
    #!/usr/bin/perl #$outfile = "output.txt"; #open(HANDLE, ">>$outfile"); @s=(79,59,12,2,79,35,8,28,20,2,3,68,8,9,68,45,0,12,9,67,68,4,7,5,23,27 +,1); foreach my $c1 ('a'..'z') { foreach my $c2 ('a'..'z') { foreach my $c3 ('a'..'z') { until ($numcount==27) { $pass = $c1.$c2.$c3; $foo = $s[$numcount]; $string1 = "$foo"; $string2 = "$pass"; $xored = $string1^$string2; $numcount++; push @lister,$xored; } print @lister, " - $foo - $pass\n"; @lister = 0; $numcount=0; } } }