+prise en compte n'importe quel srv smtp +fichier config +un seul fichier dépendance [stable~60]

This commit is contained in:
xdrm-brackets 2015-05-23 17:00:52 +02:00
parent c8b1b43c73
commit 378f2c7bbf
8 changed files with 123 additions and 59 deletions

View File

@ -1 +1,3 @@
coucou à tous !!!
blablabla
bliblibli
blobloblo

3
enigmail.config Normal file
View File

@ -0,0 +1,3 @@
smtp_server = smtp.gmail.com
smtp_port = 587
mail_address = doowap31@gmail.com

View File

@ -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];

BIN
enigmail.pyc Normal file

Binary file not shown.

View File

@ -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
View File

@ -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 !";

BIN
mail.pyc Normal file

Binary file not shown.

0
test.py Normal file
View File