+prise en compte n'importe quel srv smtp +fichier config +un seul fichier dépendance [stable~60]
This commit is contained in:
parent
c8b1b43c73
commit
378f2c7bbf
|
@ -1 +1,3 @@
|
||||||
coucou à tous !!!
|
blablabla
|
||||||
|
bliblibli
|
||||||
|
blobloblo
|
|
@ -0,0 +1,3 @@
|
||||||
|
smtp_server = smtp.gmail.com
|
||||||
|
smtp_port = 587
|
||||||
|
mail_address = doowap31@gmail.com
|
106
enigmail.py
106
enigmail.py
|
@ -1,5 +1,61 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- 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
|
# fonction qui calcule le nombre de rotors en fonction de la clé pKey et qui retourne un entier
|
||||||
def calcLevel(pKey, pSIGMA):
|
def calcLevel(pKey, pSIGMA):
|
||||||
xN = 1;
|
xN = 1;
|
||||||
|
@ -64,12 +120,50 @@ def printRotors(pROTOR):
|
||||||
|
|
||||||
# fonction qui code un caractere pChar via les rotors
|
# fonction qui code un caractere pChar via les rotors
|
||||||
def encodeChar(pChar, pSIGMA, pROTOR):
|
def encodeChar(pChar, pSIGMA, pROTOR):
|
||||||
for r in range(1, len(pROTOR)): # parcourt les rotors
|
try:
|
||||||
pChar = pSIGMA[ pROTOR[r].index(pChar) ]; # le caractere devient celui au rang de l'alphabet correspondant au rang du caractere dans le rotor r
|
for r in range(1, len(pROTOR)): # parcourt les rotors
|
||||||
return pChar;
|
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
|
# fonction qui decode un caractere pChar via les rotors
|
||||||
def decodeChar(pChar, pSIGMA, pROTOR):
|
def decodeChar(pChar, pSIGMA, pROTOR):
|
||||||
for r in reversed(range(1, len(pROTOR))): # parcourt les rotors
|
try:
|
||||||
pChar = pROTOR[r][ pSIGMA.index(pChar) ]; # le caractere devient celui au rang de l'alphabet correspondant au rang du caractere dans le rotor r
|
for r in reversed(range(1, len(pROTOR))): # parcourt les rotors
|
||||||
return pChar;
|
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];
|
Binary file not shown.
45
interface.py
45
interface.py
|
@ -1,6 +1,5 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- coding: utf-8 -*-
|
||||||
from enigmail import *
|
from enigmail import *
|
||||||
from mail import *
|
|
||||||
import getpass
|
import getpass
|
||||||
|
|
||||||
|
|
||||||
|
@ -15,18 +14,19 @@ SIGMA += 'éèêàùç'; # accents
|
||||||
SIGMA = SIGMA.decode('utf-8');
|
SIGMA = SIGMA.decode('utf-8');
|
||||||
# ALPHABET FORMATE EN LISTE
|
# ALPHABET FORMATE EN LISTE
|
||||||
SIGMA = list(SIGMA);
|
SIGMA = list(SIGMA);
|
||||||
# NOMBRE DE ROTORS
|
|
||||||
LEVEL = 3; # valeur par defaut
|
|
||||||
# CHOIX DE LA CLE
|
# CHOIX DE LA CLE
|
||||||
userkey = int( raw_input('Cle (hex ou int): '), 0);
|
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);
|
LEVEL = calcLevel(userkey, SIGMA);
|
||||||
# DECOMPOSITION DE LA CLE PRIMAIRE EN CLES SECONDAIRES
|
# DECOMPOSITION DE LA CLE PRIMAIRE EN CLES SECONDAIRES
|
||||||
KEY = decomposeKey(userkey, len(SIGMA), LEVEL);
|
KEY = decomposeKey(userkey, len(SIGMA), LEVEL);
|
||||||
# CREATION DES ROTORS EN FONCTION DES CLES SECONDAIRES
|
# CREATION DES ROTORS EN FONCTION DES CLES SECONDAIRES
|
||||||
ROTOR = [];
|
ROTOR = [];
|
||||||
ROTOR.append( [] );
|
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):
|
for i in range(0, LEVEL):
|
||||||
ROTOR.append( shuffle( SIGMA, KEY[i]) ); # on creer le rotor et le melange suivant la cle
|
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
|
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)
|
# CHOIX DU TYPE (ENCODE+MAIL / ENCODE / DECODE)
|
||||||
type = '';
|
type = '';
|
||||||
while( type != 'M' and type != 'C' and type != 'D' ):
|
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
|
# VARIABLE DU HASH
|
||||||
M = '';
|
M = '';
|
||||||
|
|
||||||
# ENCODAGE DU MESSAGE
|
|
||||||
if( type == 'M' or type == 'C' ):
|
if( type == 'M' or type == 'C' ):
|
||||||
for c in range(0, len(m)):
|
M = encodeStr(m, SIGMA, ROTOR); # ENCODAGE DU MESSAGE
|
||||||
M += encodeChar(m[c], SIGMA, ROTOR);
|
|
||||||
rotateRotorsClockwise(ROTOR); # on pivote les rotors dans le sens horaire
|
|
||||||
# DECODAGE DU MESSAGE
|
|
||||||
else:
|
else:
|
||||||
# decalage des rotor en position de fin d'encodage (taille du message -1)
|
M = decodeStr(m, SIGMA, ROTOR); # DECODAGE DU MESSAGE
|
||||||
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];
|
|
||||||
|
|
||||||
|
|
||||||
# [TYPE = M] ENVOI DU MAIL
|
# ENVOI DU MAIL
|
||||||
if( type == 'M' ):
|
if( type == 'M' ):
|
||||||
From = str( raw_input('Votre adr. gmail: ') );
|
|
||||||
Pass = str( getpass.getpass('Mot de passe : ') );
|
|
||||||
print
|
|
||||||
To = str( raw_input('Destinataire : ') );
|
To = str( raw_input('Destinataire : ') );
|
||||||
Subj = str( raw_input('Objet : ') );
|
Subj = str( raw_input('Objet : ') );
|
||||||
print
|
Pass = str( getpass.getpass('Mot de passe : ') );
|
||||||
print 'Envoi en cours';
|
print '...';
|
||||||
sendMail(From, Pass, To, Subj, M);
|
|
||||||
|
sendMail(Pass, To, Subj, M);
|
||||||
|
|
||||||
# ECRITURE FICHIER
|
# ECRITURE FICHIER
|
||||||
else:
|
else:
|
||||||
outFile = open('bucket-file', 'w');
|
outFile = open('bucket-file', 'w');
|
||||||
|
|
22
mail.py
22
mail.py
|
@ -1,24 +1,2 @@
|
||||||
# -*- coding: utf-8 -*-
|
# -*- 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 !";
|
|
Loading…
Reference in New Issue