[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]
Cifra de César
From: |
Guilherme Gall |
Subject: |
Cifra de César |
Date: |
Sun, 24 Aug 2008 00:34:03 -0300 |
Prezados(as),
Como exercício da disciplina de segurança da informação da faculdade,
desenvolvi um script que cifra um texto vindo da entrada padrão com a
cifra de César (substitui uma letra por outra, situada um número fixo
de vezes à frente no alfabeto usado).
Por exemplo: o texto ABC cifrado com chave 1 vira BCD, com chave 2
vira CDE e assim por diante.
Minha abordagem foi usar o comando y// do sed para fazer a
substituição das letras. Para isso, gero uma variável com o alfabeto
normal (ALFABETO1) e outra com o alfabeto "shiftado" (ALFABETO2) e
faço y/$ALFABETO1/$ALFABETO2/.
Por exemplo: para a chave 2 tem-se
y/abcdefghijklmnopqrstuvwxyz/cdefghijklmnopqrstuvwxyzab/
Gostaria de ouvir sugestões de melhorias para o meu script ou
sugestões de outras abordagens para resolver o problema. O script já
faz o que deveria fazer, apenas quero trocar idéias com o objetivo de
aprendizado.
Segue código abaixo:
#!/bin/bash
CHAVE=$1
PROIBIDOS="ABCDEFGHIJKLMNOPQRSTUVWXYZÀÁÂÃÉÊÍÓÔÕÚÇàáâãéêíóôõúç"
PERMITIDOS="abcdefghijklmnopqrstuvwxyzaaaaeeioooucaaaaeeiooouc"
CONTADOR=0
ALFABETO1=({a..z})
ALFABETO2=$(while [ $CONTADOR -le 25 ]; do
echo -n ${ALFABETO1[(CONTADOR+CHAVE)%26]}
let CONTADOR++
done)
ALFABETO1=$(echo ${ALFABETO1[@]} | tr -d ' ')
sed "y/$PROIBIDOS/$PERMITIDOS/; y/$ALFABETO1/$ALFABETO2/"
------------
Fiz uma substituição antes da cifragem propriamente dita para não
precisar me preocupar com letras maiúsculas e acentuadas.
Saudações
--
Guilherme Magalhães Gall
- Cifra de César,
Guilherme Gall <=