示例#1
0
def validacionCesar(argumentos):
    if (len(argumentos) != 6):
        print "\nEl numero de parametros es incorrecto"
        print "Revisar la ayuda del algoritmo de cesar: python principal.py -sc\n"
    else:
        if (argumentos[2] == "-c"):
            f = archivo.abrirArchivo(argumentos[3])
            if f == '':
                print 'No se encontro el archivo ' + argumentos[3]
            else:
                texto = ((f.read().replace(' ', '')).rstrip('\n')).upper()
                f.close()
                clave = cesar.obtenerEntero(argumentos[4])
                if (clave != -1):
                    cesar.cifrarCesar(texto, clave, argumentos[5])
        elif (argumentos[2] == "-d"):
            f = archivo.abrirArchivo(argumentos[3])
            if f == '':
                print 'No se encontro el archivo ' + argumentos[3]
            else:
                texto = ((f.read().replace(' ', '')).rstrip('\n')).upper()
                f.close()
                clave = cesar.obtenerEntero(argumentos[4])
                if (clave != -1):
                    cesar.descifrarCesar(texto, clave, argumentos[5])
        else:
            print "\nEl modo ", argumentos[2], " es incorrecto"
            print "Revisar la ayuda del algoritmo de cesar: python principal.py -sc\n"
示例#2
0
def descVigenere(archEnt, clave, archSal, cod):
    doc = archEnt
    palabra = ""
    k = ""
    f = archivo.abrirArchivo(doc)
    h = archivo.abrirArchivo(clave)
    if f == '' or h == '':
        if (f == ''):
            print('No se encontro el archivo ' + doc)
        else:
            print('No se encontro el archivo ' + clave)
    else:
        for pal in f.readlines():
            palabra = palabra + pal
        f.close()
        lg = len(palabra)
        for cla in h.readlines():
            k = k + cla
        h.close()
        lk = len(k)
        i = 0
        j = 0
        m = ""
        alf = alfabeto.getAlfabeto()
        la = alfabeto.tamAlfabeto()
        while (i < lg):
            if (j < lk):
                dato = alf[((alf.index(palabra[i]) - alf.index(k[j])) % la)]
                m = m + dato
            else:
                dato = alf[((alf.index(palabra[i]) - alf.index(m[j - lk])) %
                            la)]
                m = m + dato
            i = i + 1
            j = j + 1
        n = archSal
        if (cod == ""):
            fichero = archivo.escribirArchivo(n, m)
        else:
            fichero = archivo.escribirArchivo64(n, m)
        if fichero == '':
            print('Ocurrio un error al intentar escribir en ', n)
        else:
            fichero.close()
            print(
                "\n*********************************************************************"
            )
            print("SE GENERO EL ARCHIVO ", n, " CON EL MENSAJE EN CLARO")
            print(
                "*********************************************************************\n\n\n"
            )
def descifradoMR(arch,masc,cod):
	mensaje=""
	perforaciones=[]
	f = archivo.abrirArchivo(arch)
	p = archivo.abrirArchivo(masc)
	if f=='' or p=='':
		print ('No se encontro el archivo ',arch)
		sys.exit()
	for pal in f.readlines():
		mensaje=mensaje+pal
	f.close()
	numC=len(mensaje)
	n=int(math.ceil(math.sqrt(numC)))
	for per in p.readlines():
		perforaciones.append(per)
	p.close()
	if(int(perforaciones[0])<n):
		print ("El tamaño de la matriz es muy pequeño, debe tener un tamaño minimo de ",n)
		sys.exit()
	matriz=[]
	mascara=[]
	n=int(perforaciones[0])
	for i in range(n):
		matriz.append(["null"]*n)
		mascara.append(["-"]*n)
	llenarMatriz(matriz,mensaje,n)
	llenarMacara(mascara,perforaciones)
	mascara2=rotar(mascara,n)
	mascara3=rotar(mascara2,n)
	mascara4=rotar(mascara3,n)
	verificarMascara(mascara,mascara2,mascara3,mascara4)
	men=""
	men=men+consMensaje(matriz,mascara)
	men=men+consMensaje(matriz,mascara2)
	men=men+consMensaje(matriz,mascara3)
	men=men+consMensaje(matriz,mascara4)
	sal = arch.replace("cif","dec")
	if(cod==""):
		fichero = archivo.escribirArchivo(sal,men)
	else:
		fichero = archivo.escribirArchivo64(sal,men)		
	if fichero=='':
		print ('Ocurrio un error al intentar escribir en ', sal)
	else:
		fichero.close()
		print ("\n*********************************************************************")
		print ("SE GENERO EL ARCHIVO ",sal," CON EL MENSAJE EN CLARO")
		print ("*********************************************************************\n\n\n")
示例#4
0
def descVigenere(archEnt,clave,archSal):
	doc=archEnt
	palabra=""
	f = archivo.abrirArchivo(doc)
	if f == '':
		print 'No se encontro el archivo '+doc
	else:
		for pal in f.readlines():
			palabra=palabra+pal
		f.close()
		lg=len(palabra)
		k=clave
		lk=len(k)
		i=0
		m=""
		alf=alfabeto.getAlfabeto()
		la=alfabeto.tamAlfabeto()
		while(i<lg):
			if(i<lk):
				dato=alf[((alf.index(palabra[i])-alf.index(k[i]))%la)]
				m=m+dato
			else:
				dato=alf[((alf.index(palabra[i])-alf.index(m[i-lk]))%la)]
				m=m+dato
			i=i+1
		n = archSal
		fichero = archivo.escribirArchivo(n,m)
		if fichero=='':
			print 'Ocurrio un error al intentar escribir en ', n
		else:
			fichero.close()
			print "\n*********************************************************************"
			print "SE GENERO EL ARCHIVO ",n," CON EL MENSAJE EN CLARO"
			print "*********************************************************************\n\n\n"
def validacionFrecuencia(
    argumentos
):  #funcion validacionFrecuencia recibe el argumento de entrada en consola
    if (
            len(argumentos) != 3
    ):  ## pregunta si la posisicion del argumento de entrada es diferente de tamaño 3
        print("\nEl número de parámetros es incorrecto")
        print(
            "Revisar la ayuda del algoritmo de criptoanalisis por frecuencia: python3 proyecto.py -fre\n"
        )
    else:
        f = archivo.abrirArchivo(
            argumentos[2]
        )  #llama la funcion abrirArchivo  del archivo "archivo" y iguala la posisicion 2 del argumento en la variable f
        if f == '':
            print('No se encontro el archivo ' + argumentos[2])
        else:
            texto = ""
            nomArchivoDec = argumentos[2].replace(
                '.cif', '.dec'
            )  ##TOMA el valor de argumentos en la posicion 2 y reemplaza por la extension .cif o .dec
            for pal in f.readlines(
            ):  #lee las lineas del archivo  recorre la cadena de texto
                texto = texto + pal
            f.close()
            start_time = time()  #inicializa el tiempo de ejecucion del script
            frecuencia.analisisFrecuencia(
                texto, nomArchivoDec
            )  #llama la funcion  analisisFrecuencia en el archivo frecuencia.py y le envia las variables texto y nomArchivoDec
            elapsed_time = time(
            ) - start_time  #finaliza el tiempo de ejecucion del script
            print(
                "Tiempo transcurrido: %.10f segundos." %
                elapsed_time)  #imprime el tiempo de ejecucion total del script
示例#6
0
def validacionAfin(argumentos):
    if (len(argumentos) != 7):
        print "\nEl numero de parametros es incorrecto"
        print "Revisar la ayuda del algoritmo de afin: python principal.py -sa\n"
    else:
        if (argumentos[2] == "-c"):
            f = archivo.abrirArchivo(argumentos[3])
            if f == '':
                print 'No se encontro el archivo ' + argumentos[3]
            else:
                texto = ((f.read().replace(' ', '')).rstrip('\n')).upper()
                f.close()
                a = afin.obtenerA(argumentos[4])
                if (a != -1):
                    if (afin.verificarCoprimo(a) != True):
                        print 'El nuemero a es invalido'
                        print 'El numero debe ser primo con el tamano del alfabeto'
                    else:
                        b = afin.obtenerB(argumentos[5])
                        if (b != -1):
                            afin.cifrarAfin(texto, a, b, argumentos[6])
        elif (argumentos[2] == "-d"):
            f = archivo.abrirArchivo(argumentos[3])
            if f == '':
                print 'No se encontro el archivo ' + argumentos[3]
            else:
                texto = ((f.read().replace(' ', '')).rstrip('\n')).upper()
                f.close()
                a = afin.obtenerA(argumentos[4])
                if (a != -1):
                    if (afin.verificarCoprimo(a) != True):
                        print 'El nuemero a es invalido'
                        print 'El numero debe ser primo con el tamano del alfabeto'
                    else:
                        b = afin.obtenerB(argumentos[5])
                        if (b != -1):
                            afin.descifrarAfin(texto, a, b, argumentos[6])
        else:
            print "\nEl modo ", argumentos[2], " es incorrecto"
            print "Revisar la ayuda del algoritmo de afin: python principal.py -sa\n"
示例#7
0
def cargarAlf():
    A = archivo.abrirArchivo(nomAlfabeto)
    if A == '':
        print('No se encontro el archivo ' + nomAlfabeto)
    for letra in A.readlines():
        if (letra[0] != "\xc3" and letra[0] != "\xc2"
                and letra[0] + letra[1] != "\\n"):
            Alfabeto.append(letra[0])
        elif (letra[0] + letra[1] == "\\n"):
            Alfabeto.append('\n')
        else:
            Alfabeto.append(letra[0] + letra[1])
        #Alfabeto.append(letra)
    A.close()
示例#8
0
def cifraVigenere(archEnt,clave,archSal): 
	doc=archEnt
	palabra=""
	f = archivo.abrirArchivo(doc)
	if f=='':
		print 'No se encontro el archivo '+doc
	else:
		for pal in f.readlines():
			palabra=palabra+pal
		f.close()
		k=clave
		lk=len(k)
		i=0
		c=""
		lg=len(palabra)
		alf=alfabeto.getAlfabeto()
		la=alfabeto.tamAlfabeto()
		#imprimirTexto(palabra)
		#auxiliar=acomodarTexto(palabra)
		#imprimirTexto(auxiliar)
		while(i<lg):	
			if(i<lk):
				if(palabra[i]!='\xc3'):
					##print i
					dato= alf[((alf.index(palabra[i])+alf.index(k[i]))%la)]
					c=c+dato
				else: 
					dato= alf[((alf.index(palabra[i]+palabra[i+1])+alf.index(k[i]))%la)]
					i=i+1
					c=c+dato
			else:
				if(palabra[i]!='\xc3'):
					dato=alf[((alf.index(palabra[i])+alf.index(palabra[i-lk]))%la)]
					c=c+dato
				else:
					##print palabra[i]+palabra[i+1]
					dato=alf[((alf.index(palabra[i]+palabra[i+1])+alf.index(palabra[i-lk]))%la)]
					i=i+1
					c=c+dato
			i=i+1
		n = archSal
		fichero = archivo.escribirArchivo(n, c)
		if fichero=='':
			print 'Ocurrio un error al intentar escribir en ', n
		else:
			fichero.close()
			print "\n*********************************************************************"
			print "  SE GENERO EL ARCHIVO ", n," CON EL MENSAJE CIFRADO"
			print "*********************************************************************\n\n\n"
def validacionFrecuencia(argumentos):
    if (len(argumentos) != 3):
        print("\nEl número de parámetros es incorrecto")
        print(
            "Revisar la ayuda del algoritmo de criptoanalisis por frecuencia: python3 principal.py -caf\n"
        )
    else:
        f = archivo.abrirArchivo(argumentos[2])
        if f == '':
            print('No se encontro el archivo ' + argumentos[2])
        else:
            texto = ""
            nomArchivoDec = argumentos[2].replace('.cif', '.dec')
            for pal in f.readlines():
                texto = texto + pal
            f.close()
            start_time = time()
            frecuencia.analisisFrecuencia(texto, nomArchivoDec)
            elapsed_time = time() - start_time
            print("Tiempo transcurrido: %.10f segundos." % elapsed_time)
def validacionCesar(argumentos):
    texto = ""
    if (len(argumentos) == 6):
        if (argumentos[5] == "-c64"):
            if (argumentos[2] == "-c"):
                f = archivo.abrirArchivo64(argumentos[3])
                if f == '':
                    print('No se encontro el archivo ' + argumentos[3])
                else:
                    texto = f
                    clave = cesar.obtenerEntero(argumentos[4])
                    if (clave != -1):
                        start_time = time()
                        cesar.cifrarCesar(texto, clave, argumentos[3] + ".cif",
                                          "-c64")
                        elapsed_time = time() - start_time
                        print("Tiempo transcurrido: %.10f segundos." %
                              elapsed_time)
            elif (argumentos[2] == "-d"):
                f = archivo.abrirArchivo(argumentos[3])
                if f == '':
                    print('No se encontro el archivo ' + argumentos[3])
                else:
                    for pal in f.readlines():
                        texto = texto + pal
                    f.close()
                    clave = cesar.obtenerEntero(argumentos[4])
                    nomArchivoDec = argumentos[3].replace('.cif', '.dec')
                    if (clave != -1):
                        start_time = time()
                        cesar.descifrarCesar(texto, clave, nomArchivoDec,
                                             "-c64")
                        elapsed_time = time() - start_time
                        print("Tiempo transcurrido: %.10f segundos." %
                              elapsed_time)
        else:
            print(
                "Si deseas codificar o decodificar usa la bandera -c64 en lugar de ",
                argumentos[5])
    else:
        if (len(argumentos) != 5):
            print("\nEl número de parámetros es incorrecto")
            print(
                "Revisar la ayuda del algoritmo de cesar: python3 principal.py -sc\n"
            )
        else:
            if (argumentos[2] == "-c"):
                f = archivo.abrirArchivo(argumentos[3])
                if f == '':
                    print('No se encontro el archivo ' + argumentos[3])
                else:
                    for pal in f.readlines():
                        texto = texto + pal
                    f.close()
                    clave = cesar.obtenerEntero(argumentos[4])
                    if (clave != -1):
                        start_time = time()
                        cesar.cifrarCesar(texto, clave, argumentos[3] + ".cif",
                                          "")
                        elapsed_time = time() - start_time
                        print("Tiempo transcurrido: %.10f segundos." %
                              elapsed_time)
            elif (argumentos[2] == "-d"):
                f = archivo.abrirArchivo(argumentos[3])
                if f == '':
                    print('No se encontro el archivo ' + argumentos[3])
                else:
                    for pal in f.readlines():
                        texto = texto + pal
                    f.close()
                    clave = cesar.obtenerEntero(argumentos[4])
                    nomArchivoDec = argumentos[3].replace('.cif', '.dec')
                    if (clave != -1):
                        start_time = time()
                        cesar.descifrarCesar(texto, clave, nomArchivoDec, "")
                        elapsed_time = time() - start_time
                        print("Tiempo transcurrido: %.10f segundos." %
                              elapsed_time)
            else:
                print("\nEl modo ", argumentos[2], " es incorrecto")
                print(
                    "Revisar la ayuda del algoritmo de cesar: python3 principal.py -sc\n"
                )
def validacionAfin(argumentos):
    texto = ""
    if (len(argumentos) == 7):
        if (argumentos[6] == "-c64"):
            if (argumentos[2] == "-c"):
                f = archivo.abrirArchivo64(argumentos[3])
                if f == '':
                    print('No se encontro el archivo ' + argumentos[3])
                else:
                    texto = f
                    a = afin.obtenerA(argumentos[4])
                    if (a != -1):
                        if (afin.verificarCoprimo(a) != True):
                            print('El núemero a es invalido')
                            print(
                                'El número debe ser primo con el tamaño del alfabeto'
                            )
                        else:
                            b = afin.obtenerB(argumentos[5])
                            if (b != -1):
                                start_time = time()
                                afin.cifrarAfin(texto, a, b,
                                                argumentos[3] + ".cif", "-c64")
                                elapsed_time = time() - start_time
                                print("Tiempo transcurrido: %.10f segundos." %
                                      elapsed_time)
            elif (argumentos[2] == "-d"):
                f = archivo.abrirArchivo(argumentos[3])
                if f == '':
                    print('No se encontro el archivo ' + argumentos[3])
                else:
                    for pal in f.readlines():
                        texto = texto + pal
                    f.close()
                    a = afin.obtenerA(argumentos[4])
                    if (a != -1):
                        if (afin.verificarCoprimo(a) != True):
                            print('El número a es invalido')
                            print(
                                'El número debe ser primo con el tamano del alfabeto'
                            )
                        else:
                            b = afin.obtenerB(argumentos[5])
                            nomArchivoDec = argumentos[3].replace(
                                '.cif', '.dec')
                            if (b != -1):
                                start_time = time()
                                afin.descifrarAfin(texto, a, b, nomArchivoDec,
                                                   "-c64")
                                elapsed_time = time() - start_time
                                print("Tiempo transcurrido: %.10f segundos." %
                                      elapsed_time)
            else:
                print("\nEl modo ", argumentos[2], " es incorrecto")
                print(
                    "Revisar la ayuda del algoritmo de afin: python3 principal.py -sa\n"
                )
        else:
            print(
                "Si deseas codificar o decodificar usa la bandera -c64 en lugar de ",
                argumentos[6])
    else:
        if (len(argumentos) != 6):
            print("\nEl número de parámetros es incorrecto")
            print(
                "Revisar la ayuda del algoritmo de afín: python3 principal.py -sa\n"
            )
        else:
            if (argumentos[2] == "-c"):
                f = archivo.abrirArchivo(argumentos[3])
                if f == '':
                    print('No se encontro el archivo ' + argumentos[3])
                else:
                    for pal in f.readlines():
                        texto = texto + pal
                    f.close()
                    a = afin.obtenerA(argumentos[4])
                    if (a != -1):
                        if (afin.verificarCoprimo(a) != True):
                            print('El núemero a es invalido')
                            print(
                                'El número debe ser primo con el tamaño del alfabeto'
                            )
                        else:
                            b = afin.obtenerB(argumentos[5])
                            if (b != -1):
                                start_time = time()
                                afin.cifrarAfin(texto, a, b,
                                                argumentos[3] + ".cif", "")
                                elapsed_time = time() - start_time
                                print("Tiempo transcurrido: %.10f segundos." %
                                      elapsed_time)
            elif (argumentos[2] == "-d"):
                f = archivo.abrirArchivo(argumentos[3])
                if f == '':
                    print('No se encontro el archivo ' + argumentos[3])
                else:
                    for pal in f.readlines():
                        texto = texto + pal
                    f.close()
                    a = afin.obtenerA(argumentos[4])
                    if (a != -1):
                        if (afin.verificarCoprimo(a) != True):
                            print('El número a es invalido')
                            print(
                                'El número debe ser primo con el tamano del alfabeto'
                            )
                        else:
                            b = afin.obtenerB(argumentos[5])
                            nomArchivoDec = argumentos[3].replace(
                                '.cif', '.dec')
                            if (b != -1):
                                start_time = time()
                                afin.descifrarAfin(texto, a, b, nomArchivoDec,
                                                   "")
                                elapsed_time = time() - start_time
                                print("Tiempo transcurrido: %.10f segundos." %
                                      elapsed_time)
            else:
                print("\nEl modo ", argumentos[2], " es incorrecto")
                print(
                    "Revisar la ayuda del algoritmo de afin: python3 principal.py -sa\n"
                )
示例#12
0
def cifraVigenere(archEnt, clave, archSal, cod):
    doc = archEnt
    palabra = ""
    k = ""
    if (cod == ""):
        f = archivo.abrirArchivo(doc)
    else:
        f = archivo.abrirArchivo64(doc)
    h = archivo.abrirArchivo(clave)
    if f == '' or h == '':
        if (f == ''):
            print('No se encontro el archivo ' + doc)
        else:
            print('No se encontro el archivo ' + clave)
    else:
        if (cod == ""):
            for pal in f.readlines():
                palabra = palabra + pal
            f.close()
        else:
            palabra = f
        for cla in h.readlines():
            k = k + cla
        h.close()
        lk = len(k)
        i = 0
        j = 0
        c = ""
        lg = len(palabra)
        alf = alfabeto.getAlfabeto()
        la = alfabeto.tamAlfabeto()
        flag = 1
        # imprimirTexto(palabra)
        # try:
        while (i < lg):
            if (j < lk):
                if (cod == ""):
                    dato = alf[((alf.index(palabra[i]) + alf.index(k[j])) %
                                la)]
                else:
                    p1 = chr(palabra[i])
                    dato = alf[((alf.index(p1) + alf.index(k[j])) % la)]
                c = c + dato
            else:
                if (cod == ""):
                    dato = alf[(
                        (alf.index(palabra[i]) + alf.index(palabra[j - lk])) %
                        la)]
                else:
                    p1 = chr(palabra[i])
                    p2 = chr(palabra[j - lk])
                    dato = alf[((alf.index(p1) + alf.index(p2)) % la)]
                c = c + dato
            i = i + 1
            j = j + 1
        if (flag != -1):
            n = archSal
            fichero = archivo.escribirArchivo(n, c)
            if fichero == '':
                print('Ocurrio un error al intentar escribir en ', n)
            else:
                fichero.close()
                print(
                    "\n*********************************************************************"
                )
                print("  SE GENERO EL ARCHIVO ", n, " CON EL MENSAJE CIFRADO")
                print(
                    "*********************************************************************\n\n"
                )
        else:
            print("La ejecución se detuvo")
def cifradoMR(arch,masc,cod):
	mensaje=""
	perforaciones=[]
	if(cod==""):
		f = archivo.abrirArchivo(arch)
	else:
		f = archivo.abrirArchivo64(arch)
	p = archivo.abrirArchivo(masc)
	if f=='' or p=='':
		if f=='':
			print ('No se encontro el archivo ',arch)
		if p=='':
			print ('No se encontro el archivo ',masc)
		sys.exit()
	if(cod==""):	
		for pal in f.readlines():
			mensaje=mensaje+pal
		f.close()
	else: mensaje=f
	numC=len(mensaje)
	n=int(math.ceil(math.sqrt(numC)))
	for per in p.readlines():
		perforaciones.append(per)
	p.close()
	if(int(perforaciones[0])<n):
		print ("El tamaño de la matriz es muy pequeño, debe tener un tamaño minimo de ",n)
		sys.exit()
	x=int(numC/4)
	if(x<(numC/4.0)):
		x=x+1
	if((len(perforaciones)-1)!=x):
		print ("El numero de perforaciones 'X' no es el correcto")
		print ("La mascara debe tener ",x," perforaciones"," y tiene :",(len(perforaciones)-1))
		sys.exit()	
	matriz=[]
	mascara=[]
	n=int(perforaciones[0])
	for i in range(n):
		matriz.append(["null"]*n)
		mascara.append(["-"]*n)
	llenarMacara(mascara,perforaciones)
	if(len(mascara)==n and len(mascara[i])==n):
		mascara2=rotar(mascara,n)
		mascara3=rotar(mascara2,n)
		mascara4=rotar(mascara3,n)
	else:
		print ("La mascara debe tener tamaño ",n,"x",n)
		sys.exit()
	verificarMascara(mascara,mascara2,mascara3,mascara4)
	numP=len(perforaciones)-1
	l=0
	hubicarLetras(matriz,mascara,mensaje,l)
	l=l+numP
	hubicarLetras(matriz,mascara2,mensaje,l)
	l=l+numP
	hubicarLetras(matriz,mascara3,mensaje,l)
	l=l+numP
	hubicarLetras(matriz,mascara4,mensaje,l)
	l=l+numP
	completrar(matriz,mensaje,numC)
	cif=generarCif(matriz,cod)
	sal = arch+".cif"
	print (sal)
	fichero = archivo.escribirArchivo(sal, cif)
	if fichero=='':
		print ('Ocurrio un error al intentar escribir en ', n)
	else:
		fichero.close()
		print ("\n*********************************************************************")
		print ("  SE GENERO EL ARCHIVO ", sal," CON EL MENSAJE CIFRADO")
		print ("*********************************************************************\n\n")