import random
from math import sqrt,erfc
def generarClave(cantidadClaves,cantidadLetras,lista,diccionario_numeros):
diccionario_letras={}
texto_encriptado=[]
texto_descifrado=[]
for contador,x in enumerate(lista):
diccionario_letras[x]=contador
numero=0
alice=open("alice.txt","w")
bob=open("bob.txt","w")
for x in range(cantidadClaves):
for i in range(cantidadLetras):
numero=(diccionario_numeros[random.choice(range(29))])
binario=Binario(diccionario_letras[numero])
alice.write(binario)
bob.write(binario)
alice.write("\\n")
bob.write("\\n")
alice.close()
bob.close()
calcularN()
def Binario(x):
y=bin(x)[2:].zfill(8)
return y
def calcularN():
clave=open("alice.txt","r")
lineas=clave.readlines()
lista=("").join(lineas)
print "\\n Claves Generadas: \\n",lista
n=0
s=[]
for i in lista:
if i != "\\n":
i=int(i)
if i==0:
s.append(-1)
elif i==1:
s.append(1)
n+=1
print "N= ",n
calcularSOBS(n,sum(s))
def calcularSOBS(n,s):
print "S= ",s
sobs=abs(s/sqrt(n))
print "sobs= ",sobs
calcularPVALUE(sobs)
def calcularPVALUE(sobs):
Pvalue=erfc(sobs/sqrt(2))
print "PVALUE= ",Pvalue
if Pvalue>=0.01:
print "Por lo tanto es random"
else:
print "Por lo tanto no es random"
def main():
cantidadClaves=int(raw_input("cuantos mensajes deseas enviar? \\n"))
cantidadCaracteres=int(raw_input("de cuantos caracteres aproximadamente sera el mensaje mas largo? \\n"))
c = "abcdefghijklmnopqrstuvwxyz_ .,"
lista=("").join(c)
#diccionario que tiene como clave un numero y como valor una letra
diccionario_numeros={}
for contador,x in enumerate(lista):
#empezamos a agregar la clave: numero y el valor:letra al diccionario
diccionario_numeros[contador]=x
generarClave(cantidadClaves,cantidadCaracteres,lista,diccionario_numeros)
main()