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