+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 -*-
|
||||
|
||||
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];
|
Binary file not shown.
47
interface.py
47
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');
|
||||
|
|
22
mail.py
22
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 !";
|
Loading…
Reference in New Issue