Created
May 11, 2018 06:02
-
-
Save RicardoLara/466f6a510228ab7fa6add5005a242a0e to your computer and use it in GitHub Desktop.
Practica 4 Crypto [AES]
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
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() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
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() |
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
''' | |
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