Skip to content

Instantly share code, notes, and snippets.

@RicardoLara
Created May 11, 2018 06:02
Show Gist options
  • Save RicardoLara/466f6a510228ab7fa6add5005a242a0e to your computer and use it in GitHub Desktop.
Save RicardoLara/466f6a510228ab7fa6add5005a242a0e to your computer and use it in GitHub Desktop.
Practica 4 Crypto [AES]
'''
Practica 4.c Dencrypting: [Python 2.5.7rc1]
1.- Vamos a usar PyCrypto 2.6.1 (Last Version)
2.- Se pueden usar varias formas de generar RandomNumbers con PyCrypro ya que cuenta con una seccion
dedicada a ello: dlitz.net/software/pycrypto/api/2.6/Crypto.Random-module.html
3.- Para cifrar y descifrar usamos las funciones encrypt y decrypt dependiendo del cifrado y aqui se
puede ver toda la informacion de AES, asi como los modos de operacion: dlitz.net/software/pycrypto/api/2.6/
4.- AES, ARC2, ARC4, Blowfish, CAST, DES, DES3, XOR, etc
Practica 4.c Dencrypting - Se toma el archivo con texto cifrado y el de la llave (La cual se decodifica b64),
despues se decodifica el textocifrado obtenido y se procede a descifrar usando AES
NOTAS:
+ Para usar este .py se debe usar antes S4encrypt
+ Crea un archivo con nombre NewOriginalFile.txt (Vease valor de originalFile, linea 33)
'''
import base64
from Crypto.Cipher import AES
cipherName = raw_input('Nombre del archivo con texto cifrado (Ej. test.aes): ')
ciphertext = open(cipherName+".txt","r").read()
#print ciphertext
keyFile = raw_input('Archivo donde esta la llave plox (Ej. llave): ')
encodedkey = open(keyFile+".txt","r").read()
decodedKey = base64.b64decode(encodedkey)
#print 'Decoded Key: '+decodedKey
decodedcipher = base64.b64decode(ciphertext)
obj = AES.new(decodedKey, AES.MODE_CBC, 'This is an IV123')
originalFile = cipherName[0:len(cipherName)-4]
newFile = open("New"+originalFile+".txt","w")
#print obj.decrypt(decodedcipher)
newFile.write(obj.decrypt(decodedcipher))
newFile.close()
'''
Practica 4.b Encrypting: [Python 2.5.7rc1]
1.- Vamos a usar PyCrypto 2.6.1 (Last Version)
2.- Se pueden usar varias formas de generar RandomNumbers con PyCrypro ya que cuenta con una seccion
dedicada a ello: dlitz.net/software/pycrypto/api/2.6/Crypto.Random-module.html
3.- Para cifrar y descifrar usamos las funciones encrypt y decrypt dependiendo del cifrado y aqui se
puede ver toda la informacion de AES, asi como los modos de operacion: dlitz.net/software/pycrypto/api/2.6/
4.- AES, ARC2, ARC4, Blowfish, CAST, DES, DES3, XOR, etc
4.b Encrypting - Se toman los archivos de texto plano y donde esta almacenada la llave (esta ultima se decodifica b64),
despues se crea un objeto AES para cifrar el texto plano y una vez realizado se vuelve a codificar b64
NOTAS:
+ El num de caracteres en el archivo original DEBE ser multiplo de 16
+ Para usar este .py se debe usar antes S4keyGeneration
+ Crea un archivo con nombre plainName.aes.txt (Vease valor de plainName, linea 22)
'''
import base64
from Crypto.Cipher import AES
plainName = raw_input('Nombre del archivo con texto plano (Ej. archivo): ')
text = open(plainName+".txt","r").read()
#print text
keyFile = raw_input('Archivo donde esta la llave plox (Ej. llave): ')
encodedkey = open(keyFile+".txt","r").read()
decodedKey = base64.b64decode(encodedkey)
#print 'Decoded Key: '+decodedKey
obj = AES.new(decodedKey, AES.MODE_CBC, 'This is an IV123')
ciphertext = obj.encrypt(text)
#print 'Original Ciphertext: '+ciphertext
encodedCipher = base64.b64encode(ciphertext)
#print 'Base64 Ciphertext : '+encodedCipher
cipherFile = open(plainName+".aes.txt","w")
cipherFile.write(encodedCipher)
cipherFile.close()
'''
Practica 4.a Key Generation: [Python 2.5.7rc1]
1.- Vamos a usar PyCrypto 2.6.1 (Last Version)
2.- Se pueden usar varias formas de generar RandomNumbers con PyCrypro ya que cuenta con una seccion
dedicada a ello: dlitz.net/software/pycrypto/api/2.6/Crypto.Random-module.html
3.- Para cifrar y descifrar usamos las funciones encrypt y decrypt dependiendo del cifrado y aqui se
puede ver toda la informacion de AES, asi como los modos de operacion: dlitz.net/software/pycrypto/api/2.6/
4.- AES, ARC2, ARC4, Blowfish, CAST, DES, DES3, XOR, etc
4.a KG - Se toma el tamanio de la llave y se genera un numero aleatorio de keyLenght bits
el cual se 'recorta' a los 16 bytes necesarios para AES y se guarda la llave en base64
NOTAS:
+ Por alguna razon SIEMPRE que se codifica b64 agrega dos '='' al final, y en caso de quitarse la decodificacion falla D:
+ Se definio como keyFile.txt por defecto el archivo creado
'''
import base64
import hashlib
from Crypto.Random import random
nKey = input('Tamanio de la llave pofavo ')
rnd = random.getrandbits(nKey) #print rnd
m = hashlib.md5()
m.update(str(rnd))
print m.digest() #print m.digest_size
keyFile = open("keyFile.txt","w")
encoded = base64.b64encode(m.digest())
#print encoded
keyFile.write(encoded)
keyFile.close()
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment