diff --git a/README.md b/README.md index 167b21f..2f3aade 100644 --- a/README.md +++ b/README.md @@ -4,33 +4,15 @@ Implémentation enigma alternative en python ##### Note: Je ne suis pas expert en cryptographie, ceci n'est qu'une ébauche -### Paramètres internes -1. Alphabet utilisé - -### Paramètres externes -1. Clé (hex ou int) -2. Fichier d'entrée -3. Encodage+mail OU encodage OU décodage - -### Sortie -1. Message encodé ou décodé dans le fichier de sortie OU mail - -### Points forts -1. Rapide -2. Complexe -3. Modulable -4. Appel en shell +# Utilisation (terminal linux) - -# Utilisation - -### Initialiser +### Initialisation ######Se positionner dans le dossier __enigmail/__. ```bash -cd enigmail/ +cd chemin/enigmail/ ``` ######Créer un __alias__ pour l'utilisation d'enigmail. ```bash @@ -41,22 +23,46 @@ alias enigmail="sh $(pwd)/enigmail.sh" 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 bon dossier. +Si vous obtenez une erreur, retournez à la première étape vous n'êtes pas dans le bon dossier. -### Utiliser +### Utilisation ######Ecrire ```bash enigmail write ``` +######Modifier les paramètres +```bash +enigmail config +``` +######Réinitialiser les paramètres +```bash +enigmail init +``` ######Lire ```bash enigmail read ``` -######Crypter+Envoyer par mail/Crypter seulement/Décrypter seulement +######Effacer ```bash -enigmail +enigmail del +``` +######Crypter +```bash +enigmail encode +``` +######Décrypter +```bash +enigmail decode +``` +######Envoyer par mail +```bash +enigmail send +``` +######Obtenir de l'aide +```bash +enigmail help ``` @@ -66,4 +72,4 @@ enigmail 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 +6. Appel en shell [FAIT] diff --git a/enigmail/bucket-file b/enigmail/bucket-file index 8b13789..d39b545 100644 --- a/enigmail/bucket-file +++ b/enigmail/bucket-file @@ -1 +1,2 @@ - +Coucou à tous ! +] \ No newline at end of file diff --git a/enigmail/enigmail.sh b/enigmail/enigmail.sh index 34e4a2c..500b9f6 100644 --- a/enigmail/enigmail.sh +++ b/enigmail/enigmail.sh @@ -15,11 +15,11 @@ then # si 1 paramètre 'del') echo "">"$path/bucket-file";; # vide le bucket file # ouvre en lecture le bucket file 'read') echo "\n======================================="; cat "$path/bucket-file"; echo "\n=======================================";; - 'encode') python "$path/source/interface.py" encode;; - 'decode') python "$path/source/interface.py" decode;; - 'send') python "$path/source/interface.py" send;; + 'encode') python "$path/source/encode.py";; + 'decode') python "$path/source/decode.py";; + 'send') python "$path/source/send.py";; *) echo "Erreur"; esac; else - python "$path/source/interface.py"; + echo "Parametre manquant: enigmail help"; fi; diff --git a/enigmail/source/decode.py b/enigmail/source/decode.py new file mode 100644 index 0000000..b6554b4 --- /dev/null +++ b/enigmail/source/decode.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +from enigmail import * +import getpass, sys, os + + +# RECUPERATION DU CHEMIN ABSOLU +path = os.path.abspath( os.path.dirname(sys.argv[0]) ) + +# OUVERTURE ET LECTURE DU FICHIER +inFile = open(path + '/../bucket-file', 'r'); +m = inFile.read().decode('utf-8'); +inFile.close(); + + +# DEFINITION DE L'ALPHABET +SIGMA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; # maj +SIGMA += 'abcdefghijklmnopqrstuvwxyz'; # min +SIGMA += '&=+^~@%,.?!:;[](){}-_#$*/ \\"\'\n'; # ponctuation + retour charriot +SIGMA += '0123456789'; # digit +SIGMA += 'éèêàùç'; # accents +SIGMA = SIGMA.decode('utf-8'); + +# ALPHABET FORMATE EN LISTE +SIGMA = list(SIGMA); + +# CHOIX DE LA CLE +userkey = int( raw_input('Cle (hex ou int): '), 0); + +# 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 +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 + +M = decodeStr(m, SIGMA, ROTOR); # DECODAGE DU MESSAGE + +# ECRITURE FICHIER +outFile = open(path + '/../bucket-file', 'w'); +outFile.write( M.encode('utf-8') ); +outFile.close(); \ No newline at end of file diff --git a/enigmail/source/encode.py b/enigmail/source/encode.py new file mode 100644 index 0000000..aacb069 --- /dev/null +++ b/enigmail/source/encode.py @@ -0,0 +1,49 @@ +# -*- coding: utf-8 -*- +from enigmail import * +import getpass, sys, os + + +# RECUPERATION DU CHEMIN ABSOLU +path = os.path.abspath( os.path.dirname(sys.argv[0]) ) + +# OUVERTURE ET LECTURE DU FICHIER +inFile = open(path + '/../bucket-file', 'r'); +m = inFile.read().decode('utf-8'); +inFile.close(); + + +# DEFINITION DE L'ALPHABET +SIGMA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; # maj +SIGMA += 'abcdefghijklmnopqrstuvwxyz'; # min +SIGMA += '&=+^~@%,.?!:;[](){}-_#$*/ \\"\'\n'; # ponctuation + retour charriot +SIGMA += '0123456789'; # digit +SIGMA += 'éèêàùç'; # accents +SIGMA = SIGMA.decode('utf-8'); + +# ALPHABET FORMATE EN LISTE +SIGMA = list(SIGMA); + +# CHOIX DE LA CLE +userkey = int( raw_input('Cle (hex ou int): '), 0); + +# 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 +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 + +M = encodeStr(m, SIGMA, ROTOR); # ENCODAGE DU MESSAGE + +# ECRITURE FICHIER +outFile = open(path + '/../bucket-file', 'w'); +outFile.write( M.encode('utf-8') ); +outFile.close(); \ No newline at end of file diff --git a/enigmail/source/interface.py b/enigmail/source/interface.py deleted file mode 100644 index 733dab0..0000000 --- a/enigmail/source/interface.py +++ /dev/null @@ -1,115 +0,0 @@ -# -*- coding: utf-8 -*- -from enigmail import * -import getpass, sys, os - - - - - - - - - - -# on teste l'existence du paramètre passé à l'appel (encode/decode/send) -if( len(sys.argv) == 2 ): - if( sys.argv[1] == 'encode' or sys.argv[1] == 'decode' or sys.argv[1] == 'send' ): - arg = sys.argv[1]; - else: - print("Erreur: enigmail help"); - raise SystemExit(0); -else: - print("Erreur: enigmail help"); - raise SystemExit(0); - - - - - - - - - -path = os.path.abspath( os.path.dirname(sys.argv[0]) ); -# OUVERTURE ET LECTURE DU FICHIER -inFile = open(path + '/../bucket-file', 'r'); -m = inFile.read().decode('utf-8'); -inFile.close(); -# DEFINITION DE L'ALPHABET -SIGMA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; # maj -SIGMA += 'abcdefghijklmnopqrstuvwxyz'; # min -SIGMA += '&=+^~@%,.?!:;[](){}-_#$*/ \\"\'\n'; # ponctuation + retour charriot -SIGMA += '0123456789'; # digit -SIGMA += 'éèêàùç'; # accents -SIGMA = SIGMA.decode('utf-8'); -# ALPHABET FORMATE EN LISTE -SIGMA = list(SIGMA); - - - - - - - - - - - - - -if( arg == 'encode'): - # CHOIX DE LA CLE - userkey = int( raw_input('Cle (hex ou int): '), 0); - - # 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 - 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 - M = encodeStr(m, SIGMA, ROTOR); # ENCODAGE DU MESSAGE - # ECRITURE FICHIER - outFile = open(path + '/../bucket-file', 'w'); - outFile.write( M.encode('utf-8') ); - outFile.close(); - -elif( arg == 'decode' ): - # CHOIX DE LA CLE - userkey = int( raw_input('Cle (hex ou int): '), 0); - - # 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 - 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 - M = decodeStr(m, SIGMA, ROTOR); # DECODAGE DU MESSAGE - # ECRITURE FICHIER - outFile = open(path + '/../bucket-file', 'w'); - outFile.write( M.encode('utf-8') ); - outFile.close(); - -elif( arg == 'send' ): - # paramètres utilisateurs - conf = getConf(path); - - if( conf == False ): # si manque des paramètres - print "parametres manquants"; - raise SystemExit(0); - - To = str( raw_input('Destinataire : ') ); - Subj = str( raw_input('Objet : ') ); - Pass = str( getpass.getpass('Mot de passe : ') ); - print '...'; - - sendMail(conf, Pass, To, Subj, m); diff --git a/enigmail/source/send.py b/enigmail/source/send.py new file mode 100644 index 0000000..98aa66c --- /dev/null +++ b/enigmail/source/send.py @@ -0,0 +1,25 @@ +# -*- coding: utf-8 -*- +from enigmail import * +import getpass, sys, os + +# RECUPERATION DU CHEMIN ABSOLU +path = os.path.abspath( os.path.dirname(sys.argv[0]) ); + +# OUVERTURE ET LECTURE DU FICHIER +inFile = open(path + '/../bucket-file', 'r'); +m = inFile.read().decode('utf-8'); +inFile.close(); + +# paramètres utilisateurs +conf = getConf(path); + +if( conf == False ): # si manque des paramètres + print "parametres manquants"; + raise SystemExit(0); + +To = str( raw_input('Destinataire : ') ); +Subj = str( raw_input('Objet : ') ); +Pass = str( getpass.getpass('Mot de passe : ') ); +print '...'; + +sendMail(conf, Pass, To, Subj, m); \ No newline at end of file diff --git a/enigmail/test.py b/enigmail/test.py deleted file mode 100644 index e69de29..0000000