Quase todos já devem ter ouvido falar de criptografia. Se não ouviram, com certeza já utilizaram algum sistema ou serviço que se utilize de criptografia.
Sites de banco, por exemplo, utilizam um protocolo (HTTPS) que utiliza criptografia para garantir a segurança do seu acesso à sua conta; outro exemplo pode ser o acesso ao seu webmail.
Mas o que realmente é criptografia? Criptografia, junção de duas palavras gregas κρυπτός (kriptós – secreto, escondido) e γράφειν (gráfein – escrita), é, resumindo, o uso de técnicas para transformar texto ou dados legíveis em informação ilegível, que não possa ser compreendida. O procedimento básico pode ser mostrado na figura abaixo:

Figura 1 – Cifragem e decifragem
O algoritmo desenvolvido que realiza as funções de cifrar ou decifrar recebe o nome de cifra. Toda cifra, para realizar a sua função necessita de uma chave. A chave é uma informação que controla o resultado do algoritmo.
CIFRA DE CÉSAR
Uma das cifras mais conhecidas é a cifra de César, que foi utilizada por Júlio César para se comunicar com suas tropas durante as guerras que travava[1].
Esta cifra é bastante simples, consiste na substituição de uma letra do alfabeto por seu correspondente três casas adiante, ou seja, a letra A é substituída pela letra D, a letra B pela letra E e assim por diante (figura 2). Neste caso, o algoritmo da cifra é a troca de uma letra por outra em uma determinada posição. E a chave, neste caso, é o número 3.

Figura 2 – Cifra de César
CÓDIGO
Abaixo há uma implementação bem simples, em Python, da cifra de César.
class Caesar:
def __init__(self):
self.__letters = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'
def encrypt(self, texto_plano, key = 3):
'''(Caesar, str, int) -> str
Retorna o texto_plano cifrado com a cifra
de Cesar, utlizando a chave key,
cujo padrao e 3.
'''
cipher_text = ''
texto_plano = texto_plano.upper()
for ch in texto_plano:
if ch in self.__letters:
idx = self.__letters.find(ch) + key
if idx >= 26:
idx -= 26
cipher_text += self.__letters[idx]
return cipher_text
def decrypt(self, texto_cifrado, key = 3):
''' (Caesar, str, int) -> str
Retorna em texto plano o texto_cifrado decifrado
com a cifra de Cesar, utilizando a chave key,
cujo padrao e 3.
'''
plain_text = ''
texto_cifrado = texto_cifrado.upper()
for ch in texto_cifrado:
if ch in self.__letters:
idx = self.__letters.find(ch) - key
plain_text += self.__letters[idx]
return plain_text.lower()
Vale comentar que esta classe não trata caracteres acentuados e despreza os espaços em branco.
TESTES
O código foi salvo em um arquivo caesar.py
>>> from caesar import Caesar
>>> Caesar().encrypt('teste de texto com a cifra de Cesar')
'WHVWHGHWHAWRFRPDFLIUDGHFHVDU'
>>> Caesar().decrypt('WHVWHGHWHAWRFRPDFLIUDGHFHVDU')
'testedetextocomacifradecesar'
Os métodos da classe recebem outro parâmetro além do texto a ser cifrado ou decifrado. Recebem o valor da chave, que caso não seja passado nenhum valor, será utilizado o valor 3, como no exemplo acima. Abaixo, um exemplo de uma chave diferente de 3:
>>> from caesar import Caesar
>>> Caesar().encrypt('teste de texto com a cifra de Cesar', 21)
'OZNOZYZOZSOJXJHVXDAMVYZXZNVM'
>>> Caesar().decrypt('OZNOZYZOZSOJXJHVXDAMVYZXZNVM', 21)
'testedetextocomacifradecesar'
[1] http://en.wikipedia.org/wiki/Caesar_cipher#History_and_usage
Curtir isso:
Curtir Carregando...
Comentários