miércoles, 25 de julio de 2012

[Python Code]/Criptografía: Caesar Method.

Boas a todxs, 

Non sei se coñecedes algo de criptografía mais aí vai unha pequena explicación. Criptografía vén de "krypto" (oculto) + "graphos" (escribir), é dicer, escritura oculta, noutras palabras é a arte de cifrar e descifrar mensaxes ocultos en textos que en ocasións parecen non teren sentido.

A criptografía é algo moi presente na seguridade informática pois é preciso cifrar contrasinais, comunicacións e determinada información. Nesta ocasión, ocurriuseme escribir sobre criptografía ao atoparme un reto así nun wargame (Xogos de seguridade informática dos que máis adiante falarei deles).

Nesta proba atopeime co cifrado césar, tamén coñecido como cifrado por desprazamento, é un dos cifrados máis sinxelos e antigos da historia, un método de sustitución que consiste en mudar unha letra no texto por outra que se atopa un nº fixo de posicións máis adiante. O cifrado orixinal desprázase de 3 en 3, e dicer cambia o A polo D, o B polo E, etc... Por exemplo para LIBRE sería QÑHXK. Cando se trata dunha palabra ou dúas facelo a man é bastate sinxelo mais cando toca cifrar ou descifrar un texto de grandes dimensións, coma no wargame é máis coñazo e por iso creei esta ferramenta en python que serve para cifrar e descifrar por este método un texto con calquer extensión e con calqueira desprazamento no abecedario. Agardo fose útil esta información, o script a continuación:

#!/usr/bin/env python

#Caesar Method De/Crypter
#Author: hacklego
#twitter:@hacklego
#site: http://hackliza.blogspot.com.es
#RemoteExecution Hacking Group
#http://www.remoteexecution.info

from string import maketrans #importamos maketrans dende string
from sys import argv

if len(argv) !=4:
 print 'Usage: nomedoarquivo.py <c to crypt/d to decrypt> <translation> <"Text to crypt decrypt">'
 exit() 

option = argv[1]
trans = int(argv[2])
text = argv[3]

minus='abcdefghijklmnopqrstuvwxyz'
maius='ABCDEFGHIJKLMNOPQRSTUVWXYZ'
num='0123456789'

#Creamos dous arrays, un que conteña o abecedario (a-Z) en minusculas, maiusculas e os numeros
#do 0 ao 9. arrayc e parecido mais comezando na posicion fixada para o cifrado, e dicer, se
#fixamos 3 (traslacion) en vez de comezar no a comezaría no d e remataría no c en lugar do z.

array=minus+maius+num
arrayc=minus[trans:]+minus[:trans]+maius[trans:]+maius[:trans]+num[trans:]+num[:trans]

if option=='c':
    crypt= maketrans(array , arrayc) #cambiamos cada char en array pola que toca nesa posicion en arrayc
    print '\n'
    print 'Encrypted text:'
    print text.translate(crypt) #Aplicamos os cambios de crypt na cadena a cifrar

if option=='d':
    decrypt= maketrans(arrayc , array) #Aqui cambiamos cada char en arrayc polo que toca en array
    print '\n'
    print 'Decrypted text:'
    print text.translate(decrypt) #Aplicamos os cambios de decrypt na cadena a descifrar

print '\n'
print 'Caesar Method crypter/decrypter by hacklego to #RemoteExecution Hacking Group'

No hay comentarios:

Publicar un comentario