diff --git a/README.md~ b/README.md~ new file mode 100644 index 0000000..d75d8f8 --- /dev/null +++ b/README.md~ @@ -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] diff --git a/enigmail/.config b/enigmail/.config index c470950..89be7b0 100644 --- a/enigmail/.config +++ b/enigmail/.config @@ -1,11 +1,13 @@ -smtp_server = smtp.gmail.com -smtp_port = 587 +smtp_server = smtp.gmail.com +smtp_port = 587 -imap_server = imap.gmail.com -imap_port = 993 +imap_server = imap.gmail.com +imap_port = 993 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 diff --git a/enigmail/bucket-file b/enigmail/bucket-file index d6e47ab..28d0af9 100644 --- a/enigmail/bucket-file +++ b/enigmail/bucket-file @@ -1,8 +1 @@ -Chère Thalees, - - 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. +coucou diff --git a/enigmail/enigmail.sh b/enigmail/enigmail.sh index 38966c3..2b34580 100644 --- a/enigmail/enigmail.sh +++ b/enigmail/enigmail.sh @@ -28,17 +28,19 @@ then # si 1 paramètre au moins case $1 in 'help') cat "$path/source/help"|less;; 'init') # initialise le contenu du fichier de config - echo "smtp_server = smtp.gmail.com" > "$path/.config"; - echo "smtp_port = 587" >> "$path/.config"; + echo "smtp_server = smtp.gmail.com" > "$path/.config"; + echo "smtp_port = 587" >> "$path/.config"; echo "" >> "$path/.config"; - echo "imap_server = imap.gmail.com" >> "$path/.config"; - echo "imap_port = 993" >> "$path/.config"; + echo "imap_server = imap.gmail.com" >> "$path/.config"; + echo "imap_port = 993" >> "$path/.config"; echo "" >> "$path/.config"; echo "mail_address = test@mail.com" >> "$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 "text_editor = nano" >> "$path/.config"; + echo "algorithm_complexity = 1" >> "$path/.config"; + echo "" >> "$path/.config"; + echo "text_editor = nano" >> "$path/.config"; ;; 'config') if [ -z $param ] diff --git a/enigmail/source/decode.py b/enigmail/source/decode.py index 8ce8b18..2a56234 100644 --- a/enigmail/source/decode.py +++ b/enigmail/source/decode.py @@ -38,8 +38,11 @@ ROTOR.append( [] ); 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, 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 outFile = open(path + '/../bucket-file', 'w'); diff --git a/enigmail/source/encode.py b/enigmail/source/encode.py index 435a714..29a21ac 100644 --- a/enigmail/source/encode.py +++ b/enigmail/source/encode.py @@ -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[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 outFile = open(path + '/../bucket-file', 'w'); outFile.write( M.encode('utf-8') ); diff --git a/enigmail/source/enigmail.py b/enigmail/source/enigmail.py index 5581dc5..fc8c53f 100644 --- a/enigmail/source/enigmail.py +++ b/enigmail/source/enigmail.py @@ -25,10 +25,23 @@ def getConf(pPath): except ValueError: 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; - else: - return False; + except (KeyError, ValueError): + print "Erreur: fichier de configuration incomplet"; + raise SystemExit(0); @@ -85,7 +98,7 @@ def getMail(pConf, pPass): def getSigma(): SIGMA = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; # maj SIGMA += 'abcdefghijklmnopqrstuvwxyz'; # min - SIGMA += '&=+^~@%,.?!:;[](){}-_#$*/ \\"«»\'\n'; # ponctuation + retour charriot + SIGMA += '&=+^~@%,.?!:;[](){}-_#$*/ \t\\"«»\'\n'; # ponctuation + retour charriot SIGMA += '0123456789'; # digit SIGMA += 'éèêàâùçîô'; # accents SIGMA = SIGMA.decode('utf-8'); @@ -209,6 +222,5 @@ def decodeStr(pM, pSIGMA, pROTOR, pTimes): decodedStr += decodeChar(c, pSIGMA, pROTOR); # on lit le caractere rotateRotorsAnticlockwise(pROTOR); # on tourne les rotors dans le sens inverse tmp = decodedStr[::-1]; - # on retourne la chaine return decodedStr[::-1]; \ No newline at end of file diff --git a/enigmail/source/enigmail.pyc b/enigmail/source/enigmail.pyc index 2a8d82b..b2ddc5d 100644 Binary files a/enigmail/source/enigmail.pyc and b/enigmail/source/enigmail.pyc differ diff --git a/enigmail/source/receive.py b/enigmail/source/receive.py index e6c1666..60bf930 100644 --- a/enigmail/source/receive.py +++ b/enigmail/source/receive.py @@ -8,10 +8,6 @@ path = os.path.abspath( os.path.dirname(sys.argv[0]) ); # paramètres utilisateurs conf = getConf(path); -if( conf == False ): # si manque des paramètres - print "parametres manquants"; - raise SystemExit(0); - Pass = str( getpass.getpass('Mot de passe : ') ); print '...'; diff --git a/enigmail/source/send.py b/enigmail/source/send.py index 98aa66c..99f5ff3 100644 --- a/enigmail/source/send.py +++ b/enigmail/source/send.py @@ -13,10 +13,6 @@ 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 : ') );