diff --git a/bucket-file b/bucket-file index e75d99a..730a63b 100644 --- a/bucket-file +++ b/bucket-file @@ -1 +1,3 @@ -coucou à tous !!! \ No newline at end of file +blablabla +bliblibli +blobloblo \ No newline at end of file diff --git a/enigmail.config b/enigmail.config new file mode 100644 index 0000000..1d40562 --- /dev/null +++ b/enigmail.config @@ -0,0 +1,3 @@ +smtp_server = smtp.gmail.com +smtp_port = 587 +mail_address = doowap31@gmail.com \ No newline at end of file diff --git a/enigmail.py b/enigmail.py index 959edb7..3e42fbc 100644 --- a/enigmail.py +++ b/enigmail.py @@ -1,5 +1,61 @@ # -*- coding: utf-8 -*- +import smtplib +from email.MIMEMultipart import MIMEMultipart +from email.MIMEText import MIMEText + + + + +# cette fonction récupère toutes les lignes du fichier enigmail.config et les stocke dans un dictionaire qui est retourné +def getConf(): + fConf = open('enigmail.config', 'r'); + lines = fConf.readlines(); + fConf.close(); + + conf = {}; + + for i in lines: + confKey = i[:i.index('=')].replace(' ', ''); + confVal = i[i.index('=')+1:].replace(' ', '').replace('\n', ''); + conf[confKey] = confVal; + + if( len(conf) >= 3 ): # si le fichier de config est bien récupéré et qu'il est complet (3 entrées) + return conf; + else: + return False; + + + +# cette fonction envoie un mail +def sendMail(pPass, pTo, pSubject, pMessage): + conf = getConf(); # on récupère les informations du fichier de config + + if( not conf ): # si enigmail.config est imcomplet ou a une erreur on envoie pas le mail + print "> Fichier enigmail.config incomplet ou contient une erreur" + else: # si tout est ok => envoi du mail + pMsg = MIMEMultipart(); + pMsg['From'] = conf['mail_address']; + pMsg['To'] = pTo; + pMsg['Subject'] = pSubject; + + pMsg.attach( MIMEText(pMessage.encode('utf-8')) ); + + srv = smtplib.SMTP(conf['smtp_server'], conf['smtp_port']); + srv.ehlo(); + srv.starttls(); + srv.ehlo(); + srv.login(conf['mail_address'], pPass); + + srv.sendmail( conf['mail_address'], pTo, pMsg.as_string() ); + srv.quit(); + + print "> Mail envoye !"; + + + + + # fonction qui calcule le nombre de rotors en fonction de la clé pKey et qui retourne un entier def calcLevel(pKey, pSIGMA): xN = 1; @@ -64,12 +120,50 @@ def printRotors(pROTOR): # fonction qui code un caractere pChar via les rotors def encodeChar(pChar, pSIGMA, pROTOR): - for r in range(1, len(pROTOR)): # parcourt les rotors - pChar = pSIGMA[ pROTOR[r].index(pChar) ]; # le caractere devient celui au rang de l'alphabet correspondant au rang du caractere dans le rotor r - return pChar; + try: + for r in range(1, len(pROTOR)): # parcourt les rotors + pChar = pSIGMA[ pROTOR[r].index(pChar) ]; # le caractere devient celui au rang de l'alphabet correspondant au rang du caractere dans le rotor r + return pChar; + except ValueError: # si un caractère n'est pas dans l'alphabet + print "[ERREUR] Caractere non present dans l'alphabet"; + raise SystemExit(0); # fonction qui decode un caractere pChar via les rotors def decodeChar(pChar, pSIGMA, pROTOR): - for r in reversed(range(1, len(pROTOR))): # parcourt les rotors - pChar = pROTOR[r][ pSIGMA.index(pChar) ]; # le caractere devient celui au rang de l'alphabet correspondant au rang du caractere dans le rotor r - return pChar; + try: + for r in reversed(range(1, len(pROTOR))): # parcourt les rotors + pChar = pROTOR[r][ pSIGMA.index(pChar) ]; # le caractere devient celui au rang de l'alphabet correspondant au rang du caractere dans le rotor r + return pChar; + except ValueError: # si un caractère n'est pas dans l'alphabet + print "[ERREUR] Caractere non present dans l'alphabet"; + raise SystemExit(0); + + + + +# fonction qui encode une chaine +def encodeStr(pM, pSIGMA, pROTOR): + encodedStr = ''; + for c in pM: + encodedStr += encodeChar(c, pSIGMA, pROTOR); + rotateRotorsClockwise(pROTOR); # on pivote les rotors dans le sens horaire + return encodedStr; + + + + + +# fonction qui decode une chaine +def decodeStr(pM, pSIGMA, pROTOR): + decodedStr = ''; + # decalage des rotor en position de fin d'encodage (taille du message -1) + for r in pM[1:]: + rotateRotorsClockwise(pROTOR); + + # pour chaque caractere en partant du dernier + for c in pM[::-1]: + decodedStr += decodeChar(c, pSIGMA, pROTOR); # on lit le caractere + rotateRotorsAnticlockwise(pROTOR); # on tourne les rotors dans le sens inverse + + # on retourne la chaine + return decodedStr[::-1]; \ No newline at end of file diff --git a/enigmail.pyc b/enigmail.pyc new file mode 100644 index 0000000..f4bda30 Binary files /dev/null and b/enigmail.pyc differ diff --git a/interface.py b/interface.py index e2b4752..915dcd2 100644 --- a/interface.py +++ b/interface.py @@ -1,6 +1,5 @@ # -*- coding: utf-8 -*- from enigmail import * -from mail import * import getpass @@ -15,18 +14,19 @@ SIGMA += 'éèêàùç'; # accents SIGMA = SIGMA.decode('utf-8'); # ALPHABET FORMATE EN LISTE SIGMA = list(SIGMA); -# NOMBRE DE ROTORS -LEVEL = 3; # valeur par defaut + + # CHOIX DE LA CLE userkey = int( raw_input('Cle (hex ou int): '), 0); -# CALCUL de LEVEL en fonction de la clé + +# CALCUL de LEVEL en fonction de la clé (LEVEL = nombre de rotors) LEVEL = calcLevel(userkey, SIGMA); # DECOMPOSITION DE LA CLE PRIMAIRE EN CLES SECONDAIRES KEY = decomposeKey(userkey, len(SIGMA), LEVEL); # CREATION DES ROTORS EN FONCTION DES CLES SECONDAIRES ROTOR = []; ROTOR.append( [] ); -# on cree les rotors grace a sigma et aux cles recuperees +# on cree les rotors grace a SIGMA et aux cles recuperees for i in range(0, LEVEL): ROTOR.append( shuffle( SIGMA, KEY[i]) ); # on creer le rotor et le melange suivant la cle ROTOR[0].append( ROTOR[i+1][0] ); # on enregistre la l&ettre en premiere position dans la premiere entree du rotor @@ -43,40 +43,27 @@ inFile.close(); # CHOIX DU TYPE (ENCODE+MAIL / ENCODE / DECODE) type = ''; while( type != 'M' and type != 'C' and type != 'D' ): - type = ( raw_input('[M] Crypter et envoyer par mail\n[C] Crypter\n[D] Décrypter\n > ') ).upper(); + type = ( raw_input('[M] Crypter et envoyer par mail\n[C] Crypter\n[D] Décrypter\n> ') ).upper(); + print; # VARIABLE DU HASH M = ''; -# ENCODAGE DU MESSAGE + if( type == 'M' or type == 'C' ): - for c in range(0, len(m)): - M += encodeChar(m[c], SIGMA, ROTOR); - rotateRotorsClockwise(ROTOR); # on pivote les rotors dans le sens horaire -# DECODAGE DU MESSAGE -else: - # decalage des rotor en position de fin d'encodage (taille du message -1) - for r in range(1, len(m)): - rotateRotorsClockwise(ROTOR); - - # pour chaque caractere en partant du dernier - for c in reversed(range(0, len(m))): - M += decodeChar(m[c], SIGMA, ROTOR); # on lit le caractere - rotateRotorsAnticlockwise(ROTOR); # on tourne les rotors dans le sens inverse - - # on retourne la chaine - M = M[::-1]; + M = encodeStr(m, SIGMA, ROTOR); # ENCODAGE DU MESSAGE +else: + M = decodeStr(m, SIGMA, ROTOR); # DECODAGE DU MESSAGE -# [TYPE = M] ENVOI DU MAIL +# ENVOI DU MAIL if( type == 'M' ): - From = str( raw_input('Votre adr. gmail: ') ); - Pass = str( getpass.getpass('Mot de passe : ') ); - print To = str( raw_input('Destinataire : ') ); Subj = str( raw_input('Objet : ') ); - print - print 'Envoi en cours'; - sendMail(From, Pass, To, Subj, M); + Pass = str( getpass.getpass('Mot de passe : ') ); + print '...'; + + sendMail(Pass, To, Subj, M); + # ECRITURE FICHIER else: outFile = open('bucket-file', 'w'); diff --git a/mail.py b/mail.py index a8f9052..633f866 100644 --- a/mail.py +++ b/mail.py @@ -1,24 +1,2 @@ # -*- coding: utf-8 -*- -import smtplib -from email.MIMEMultipart import MIMEMultipart -from email.MIMEText import MIMEText - -def sendMail(pFrom, pPass, pTo, pSubject, pMessage): - pMsg = MIMEMultipart(); - pMsg['From'] = pFrom; - pMsg['To'] = pTo; - pMsg['Subject'] = pSubject; - - pMsg.attach( MIMEText(pMessage.encode('utf-8')) ); - - srv = smtplib.SMTP('smtp.gmail.com', 587); - srv.ehlo(); - srv.starttls(); - srv.ehlo(); - srv.login(pFrom, pPass); - - srv.sendmail( pFrom, pTo, pMsg.as_string() ); - srv.quit(); - - print "[*] Mail envoye !"; \ No newline at end of file diff --git a/mail.pyc b/mail.pyc new file mode 100644 index 0000000..dcb7e44 Binary files /dev/null and b/mail.pyc differ diff --git a/test.py b/test.py new file mode 100644 index 0000000..e69de29