PCF-3

Questões comentadas, artigos e notícias

Desafio de Crypto II: Cifra de Vigenère

Posted by papacharliefox3 em 02/04/2009

Salve cabocos!

Dando continuidade aos estudos de Crypto, escrevi o script shell abaixo a fim de realizar a rotina de criptografia segundo o algoritmo de Vigenère. Em um post anterior, publiquei outro script mais simples ainda em um post anterior, que implementa o algoritmo da cifra de César.

Segue exemplo de funcionamento (aproveitando exemplo do Wikipedia):

$ ./vigenere.sh
Usage: ./vigenere.sh “Message” “KEY”
$ ./vigenere.sh ATTACKATDAWN LEMON
LXFOPVEFRNHR

Código do script:


#!/bin/sh
#
# Vigenere Cipher in Bash
#
# Author: alexandre.abreu@gmail.com
# Date: 30/03/09
#
# http://en.wikipedia.org/wiki/Vigenere_cipher

[ -n "$2" ] || {
   echo "Usage: $0 \"Message\" \"KEY\""
   exit 1
}

# sanitize
echo -n $2 | grep -qi "^[a-z]\{1,\}$" || {
   echo "KEY must be alpha"
   exit 1
}

IFS="
"

# index the key
for char in `echo -n "$2" | tr '[a-z]' '[A-Z]' | grep -o "."`; do
   dec=$(printf "%d" \'${char})
   KEY[1+k++]=$[dec-64]
done

# load vigenere square
for((p=1;p<27;p++)); do
   f=$p
   for((c=1;c<27;c++)); do
      eval SQR_${p}_$c=$f
      let f++
      [ $f -gt 26 ] && f=1
   done
done

for char in `echo -n "$1" | tr '[a-z]' '[A-Z]' | grep -o "."`; do
   dec=$(printf "%d" \'${char})
   ( [ $dec -lt 65 ] || [ $dec -gt 90 ] ) && {
      echo -n $char
      continue
   }
   kindex=$[1+inc++%k]
   charindex=$[dec-64]

   eval dec=\$SQR_${KEY[kindex]}_${charindex}

   dec=$[dec+64]
   char=$(printf "%02X" $dec)
   printf "\x${char}"

done

echo

exit 0

Beleza, mas e o desafio? É simples: implemente a rotina ou o suporte a descriptografia ao script acima. Se quiser reescrever em outra linguagem, sem problemas.

Até a próxima!

Deixe um comentário