A slightly less simple obfuscation for a slightly less simple substitution cipher. My next stop in old forgotten encryption ciphers is the Vigenére cipher. This is a slightly more obfuscated encryption cipher than my last one - In case you haven't noticed, I'm increasing the obfuscation level as the encryption algorithm increases. This either takes a file as a parameter to encrypt in vigenere, or provided no input encrypts it's __DATA__.
Note: if you save this locally (and I don't know how you might run it otherwise) be sure to give it a filename of a good number of characters ( > 5) - The longer the filename, the better the encryption key.
#!/usr/bin/perl
$ ..=$ _ for qw|$ @=/b..u\;/_@ =vqv \?qvcl+FOTO ,_@:_$;kbv($_@ =$ @;jd
+/_;++\(d
qR_"/2. ._;\(vz xH$ _@,xHjdy$ _@)) )$ @;$. =kbv[$ _@] ,_0= ~{}w {g|;$
+_=$ . ,y
,/FO\\{vzlu}\$dqR_Hjk\@yq(xybRc),(DA)/punz\\\@for\$him_to{stare},,s..
+$ _.gee;
print map { map { $ %= 0 ;s '([A-Z])(?{$ %=1})'lc$ 1'e ;$ ;=$ .[ $ *]
+[ - 97 +
ord ]; $ *+= $ *== @ .-1? -$ *:1 ;ord> 96?$ %? uc$ ; :$ ; :$ _ }split/
+/}<DATA>
__DATA__
The Vigenere cipher, known by some as 'le chiffre indechiffrable' (Fre
+nch for
'the indecipherable cipher') is a method of encryption that uses a ser
+ies of
different Caesar ciphers based on the letters of a keyword, though the
+re is
some argument among cryptographic circles as to which incarnation of t
+his
particular polyalphabetic substitution can accurately be attributed to
+ Blaise
de Vigenere. This implementation is a simple form of a polyalphabetic
substitution. To encipher, a table of alphabets can be used, termed a
+ tabula
recta, or Vigenere table. It consists of the alphabet written out 26
+times
in different rows, each alphabet shifted cyclicly to the left compared
+ to the
previous alphabet. Incidentally, there's a good chance that this plai
+ntext
is long enough to display the cryptographical weakness of this particu
+lar
algorithm. Can you spot it?
I'm currently working on the brute-force decryption for texts encrypted with this algorithm. It's working now, but I'd like to clean it up and make it more general, as well as optionally display HTML output.
I've found a somewhat reliable method for letter distribution frequency analysis that seems to work for a good number of test cases - Letter frequency analysis is the obvious weakness of this cipher. I'll post a followup with the cracking script a bit later...
--chargrill
$,=42;for(34,0,-3,9,-11,11,-17,7,-5){$*.=pack'c'=>$,+=$_}for(reverse s
+plit//=>$*
){$%++?$ %%2?push@C,$_,$":push@c,$_,$":(push@C,$_,$")&&push@c,$"}$C[$#
+C]=$/;($#C
>$#c)?($ c=\@C)&&($ C=\@c):($ c=\@c)&&($C=\@C);$%=$|;for(@$c){print$_^
+$$C[$%++]}