Gestion config finie + niveau complexité [stable~80]
This commit is contained in:
parent
3c63a646b7
commit
69e1c79cd7
|
@ -0,0 +1,83 @@
|
||||||
|
# Enigmail.py
|
||||||
|
|
||||||
|
Implémentation enigma alternative en python
|
||||||
|
|
||||||
|
##### Note: Je ne suis pas expert en cryptographie, ceci n'est qu'une ébauche
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
# Utilisation (terminal linux)
|
||||||
|
|
||||||
|
### Initialisation
|
||||||
|
|
||||||
|
######Se positionner dans le dossier __enigmail/__.
|
||||||
|
```bash
|
||||||
|
cd chemin/enigmail/
|
||||||
|
```
|
||||||
|
######Créer un __alias__ pour l'utilisation d'enigmail.
|
||||||
|
```bash
|
||||||
|
alias enigmail="sh $(pwd)/enigmail.sh"
|
||||||
|
```
|
||||||
|
######Entrez vos paramètres personnels
|
||||||
|
```bash
|
||||||
|
enigmail config
|
||||||
|
```
|
||||||
|
Il vous faudra ensuite entrer vos paramètres en remplaçant les valeurs déjà écrites puis enregistrer le fichier
|
||||||
|
Si vous obtenez une erreur, retournez à la première étape vous n'êtes pas dans le bon dossier.
|
||||||
|
|
||||||
|
|
||||||
|
### Utilisation
|
||||||
|
|
||||||
|
######Ecrire
|
||||||
|
```bash
|
||||||
|
enigmail write
|
||||||
|
```
|
||||||
|
######Modifier les paramètres
|
||||||
|
```bash
|
||||||
|
enigmail config
|
||||||
|
```
|
||||||
|
######Réinitialiser les paramètres
|
||||||
|
```bash
|
||||||
|
enigmail init
|
||||||
|
```
|
||||||
|
######Lire
|
||||||
|
```bash
|
||||||
|
enigmail read
|
||||||
|
```
|
||||||
|
######Effacer le contenu
|
||||||
|
```bash
|
||||||
|
enigmail empty
|
||||||
|
```
|
||||||
|
######Crypter
|
||||||
|
```bash
|
||||||
|
enigmail encode
|
||||||
|
enigmail encode 168
|
||||||
|
enigmail encode 0x1f2e85
|
||||||
|
```
|
||||||
|
######Décrypter
|
||||||
|
```bash
|
||||||
|
enigmail decode
|
||||||
|
enigmail decode 168
|
||||||
|
enigmail decode 0x1285
|
||||||
|
```
|
||||||
|
######Envoyer par mail
|
||||||
|
```bash
|
||||||
|
enigmail send
|
||||||
|
```
|
||||||
|
######Récupérer le contenu du dernier mail
|
||||||
|
```bash
|
||||||
|
enigmail receive
|
||||||
|
```
|
||||||
|
######Obtenir de l'aide
|
||||||
|
```bash
|
||||||
|
enigmail help
|
||||||
|
```
|
||||||
|
|
||||||
|
|
||||||
|
### A faire
|
||||||
|
1. Prise en compte: accents + utf-8 [FAIT]
|
||||||
|
2. Gestion: fichiers [FAIT]
|
||||||
|
3. Améliorer le cryptage car pour un même caractère n fois, on obtient un schéma répétitif
|
||||||
|
4. Gestion de serveur SMTP [FAIT~50]
|
||||||
|
5. Fichier de config [FAIT~80]
|
||||||
|
6. Appel en shell [FAIT]
|
|
@ -1,11 +1,13 @@
|
||||||
smtp_server = smtp.gmail.com
|
smtp_server = smtp.gmail.com
|
||||||
smtp_port = 587
|
smtp_port = 587
|
||||||
|
|
||||||
imap_server = imap.gmail.com
|
imap_server = imap.gmail.com
|
||||||
imap_port = 993
|
imap_port = 993
|
||||||
|
|
||||||
mail_address = test@mail.com
|
mail_address = test@mail.com
|
||||||
|
|
||||||
login = equal_mailadress_or_different_login
|
login = equal_mailadress_or_different_login
|
||||||
|
|
||||||
text_editor = nano
|
algorithm_complexity = 1
|
||||||
|
|
||||||
|
text_editor = nano
|
||||||
|
|
|
@ -1,8 +1 @@
|
||||||
Chère Thalees,
|
coucou
|
||||||
|
|
||||||
J'ai toujours eu cette envie soudaine et secrète de vous communiquer
|
|
||||||
mes amitiées et mes plus sincères salutations.
|
|
||||||
|
|
||||||
Miaow !
|
|
||||||
|
|
||||||
Votre admirateur secret.
|
|
||||||
|
|
|
@ -28,17 +28,19 @@ then # si 1 paramètre au moins
|
||||||
case $1 in
|
case $1 in
|
||||||
'help') cat "$path/source/help"|less;;
|
'help') cat "$path/source/help"|less;;
|
||||||
'init') # initialise le contenu du fichier de config
|
'init') # initialise le contenu du fichier de config
|
||||||
echo "smtp_server = smtp.gmail.com" > "$path/.config";
|
echo "smtp_server = smtp.gmail.com" > "$path/.config";
|
||||||
echo "smtp_port = 587" >> "$path/.config";
|
echo "smtp_port = 587" >> "$path/.config";
|
||||||
echo "" >> "$path/.config";
|
echo "" >> "$path/.config";
|
||||||
echo "imap_server = imap.gmail.com" >> "$path/.config";
|
echo "imap_server = imap.gmail.com" >> "$path/.config";
|
||||||
echo "imap_port = 993" >> "$path/.config";
|
echo "imap_port = 993" >> "$path/.config";
|
||||||
echo "" >> "$path/.config";
|
echo "" >> "$path/.config";
|
||||||
echo "mail_address = test@mail.com" >> "$path/.config";
|
echo "mail_address = test@mail.com" >> "$path/.config";
|
||||||
echo "" >> "$path/.config";
|
echo "" >> "$path/.config";
|
||||||
echo "login = equal_mailadress_or_different_login" >> "$path/.config";
|
echo "login = equal_mailadress_or_different_login" >> "$path/.config";
|
||||||
echo "" >> "$path/.config";
|
echo "" >> "$path/.config";
|
||||||
echo "text_editor = nano" >> "$path/.config";
|
echo "algorithm_complexity = 1" >> "$path/.config";
|
||||||
|
echo "" >> "$path/.config";
|
||||||
|
echo "text_editor = nano" >> "$path/.config";
|
||||||
;;
|
;;
|
||||||
'config')
|
'config')
|
||||||
if [ -z $param ]
|
if [ -z $param ]
|
||||||
|
|
|
@ -38,8 +38,11 @@ ROTOR.append( [] );
|
||||||
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
|
||||||
|
|
||||||
M = decodeStr(m, SIGMA, ROTOR, 1); # DECODAGE DU MESSAGE (dernier arg = nombre de fois)
|
# Récupère le niveau de complexité dans le fichier de configuration si il y est
|
||||||
|
Complexity = int( getConf(path)['algorithm_complexity'], 0 );
|
||||||
|
|
||||||
|
M = decodeStr(m, SIGMA, ROTOR, Complexity); # DECODAGE DU MESSAGE (dernier arg = nombre de fois)
|
||||||
|
|
||||||
# ECRITURE FICHIER
|
# ECRITURE FICHIER
|
||||||
outFile = open(path + '/../bucket-file', 'w');
|
outFile = open(path + '/../bucket-file', 'w');
|
||||||
|
|
|
@ -35,7 +35,10 @@ 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
|
||||||
|
|
||||||
M = encodeStr(m, SIGMA, ROTOR, 1); # ENCODAGE DU MESSAGE (dernier arg = nombre de fois)
|
# Récupère le niveau de complexité dans le fichier de configuration si il y est
|
||||||
|
Complexity = int( getConf(path)['algorithm_complexity'], 0 );
|
||||||
|
|
||||||
|
M = encodeStr(m, SIGMA, ROTOR, Complexity); # ENCODAGE DU MESSAGE (dernier arg = nombre de fois)
|
||||||
# ECRITURE FICHIER
|
# ECRITURE FICHIER
|
||||||
outFile = open(path + '/../bucket-file', 'w');
|
outFile = open(path + '/../bucket-file', 'w');
|
||||||
outFile.write( M.encode('utf-8') );
|
outFile.write( M.encode('utf-8') );
|
||||||
|
|
|
@ -25,10 +25,23 @@ def getConf(pPath):
|
||||||
except ValueError:
|
except ValueError:
|
||||||
pass;
|
pass;
|
||||||
|
|
||||||
if( len(conf) >= 6 ): # si le fichier de config est bien récupéré et qu'il est complet
|
allPropertiesOk = False;
|
||||||
|
try:
|
||||||
|
conf['smtp_server'];
|
||||||
|
conf['smtp_port'];
|
||||||
|
|
||||||
|
conf['imap_server'];
|
||||||
|
conf['imap_port'];
|
||||||
|
|
||||||
|
conf['mail_address'];
|
||||||
|
conf['login'];
|
||||||
|
|
||||||
|
conf['algorithm_complexity'];
|
||||||
|
|
||||||
return conf;
|
return conf;
|
||||||
else:
|
except (KeyError, ValueError):
|
||||||
return False;
|
print "Erreur: fichier de configuration incomplet";
|
||||||
|
raise SystemExit(0);
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@ -85,7 +98,7 @@ def getMail(pConf, pPass):
|
||||||
def getSigma():
|
def getSigma():
|
||||||
SIGMA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; # maj
|
SIGMA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; # maj
|
||||||
SIGMA += 'abcdefghijklmnopqrstuvwxyz'; # min
|
SIGMA += 'abcdefghijklmnopqrstuvwxyz'; # min
|
||||||
SIGMA += '&=+^~@%,.?!:;[](){}-_#$*/ \\"«»\'\n'; # ponctuation + retour charriot
|
SIGMA += '&=+^~@%,.?!:;[](){}-_#$*/ \t\\"«»\'\n'; # ponctuation + retour charriot
|
||||||
SIGMA += '0123456789'; # digit
|
SIGMA += '0123456789'; # digit
|
||||||
SIGMA += 'éèêàâùçîô'; # accents
|
SIGMA += 'éèêàâùçîô'; # accents
|
||||||
SIGMA = SIGMA.decode('utf-8');
|
SIGMA = SIGMA.decode('utf-8');
|
||||||
|
@ -209,6 +222,5 @@ def decodeStr(pM, pSIGMA, pROTOR, pTimes):
|
||||||
decodedStr += decodeChar(c, pSIGMA, pROTOR); # on lit le caractere
|
decodedStr += decodeChar(c, pSIGMA, pROTOR); # on lit le caractere
|
||||||
rotateRotorsAnticlockwise(pROTOR); # on tourne les rotors dans le sens inverse
|
rotateRotorsAnticlockwise(pROTOR); # on tourne les rotors dans le sens inverse
|
||||||
tmp = decodedStr[::-1];
|
tmp = decodedStr[::-1];
|
||||||
|
|
||||||
# on retourne la chaine
|
# on retourne la chaine
|
||||||
return decodedStr[::-1];
|
return decodedStr[::-1];
|
Binary file not shown.
|
@ -8,10 +8,6 @@ path = os.path.abspath( os.path.dirname(sys.argv[0]) );
|
||||||
# paramètres utilisateurs
|
# paramètres utilisateurs
|
||||||
conf = getConf(path);
|
conf = getConf(path);
|
||||||
|
|
||||||
if( conf == False ): # si manque des paramètres
|
|
||||||
print "parametres manquants";
|
|
||||||
raise SystemExit(0);
|
|
||||||
|
|
||||||
Pass = str( getpass.getpass('Mot de passe : ') );
|
Pass = str( getpass.getpass('Mot de passe : ') );
|
||||||
print '...';
|
print '...';
|
||||||
|
|
||||||
|
|
|
@ -13,10 +13,6 @@ inFile.close();
|
||||||
# paramètres utilisateurs
|
# paramètres utilisateurs
|
||||||
conf = getConf(path);
|
conf = getConf(path);
|
||||||
|
|
||||||
if( conf == False ): # si manque des paramètres
|
|
||||||
print "parametres manquants";
|
|
||||||
raise SystemExit(0);
|
|
||||||
|
|
||||||
To = str( raw_input('Destinataire : ') );
|
To = str( raw_input('Destinataire : ') );
|
||||||
Subj = str( raw_input('Objet : ') );
|
Subj = str( raw_input('Objet : ') );
|
||||||
Pass = str( getpass.getpass('Mot de passe : ') );
|
Pass = str( getpass.getpass('Mot de passe : ') );
|
||||||
|
|
Loading…
Reference in New Issue