Accueil > > > CRYPTE ET DECRYPTE UN FICHIER (AVEC HASH POUR VÉRIFICATION)
CRYPTE ET DECRYPTE UN FICHIER (AVEC HASH POUR VÉRIFICATION)
Information sur la source
Description
Cryptage avec plusieurs niveaux.
Description rapide du fonctionnement du script:
CRYPTE
0/ lire le fichier d origine
1/ hash du fichier
2/ ralonge le fichier pour qu il soit d'une longeur multiple de 16 !
3/ ajout du hash à la fin du fichier
4/ cryptage 1er niveau: AES avec la clé fournit
5/ cryptage 2eme niveau: ARC2 avec la clé*2
6/ cryptage 3eme niveau: ARC4 avec la clé*3
7/ ecrire le fichier de destination
DECRYPT
0/ lire le fichier d origine
1/ decryptage 3eme niveau: ARC4 avec la clé*3
2/ decryptage 2eme niveau: ARC2 avec la clé*2
3/ decryptage 1er niveau: AES avec la clé fournit
4/ enleve la ralonge et recupe le hash
5/ verification du hash
6/ ecrit le fichier de destination
Source
- #argument 1: ['c','C','Crypt','CRYPT'] pour crypter
- # quoique ce soit d'autre pour decrypter
- #
- #argument 2: cle à utiliser pour crypter ou decrypter (multiple de 16 caractères) (A-Z/a-z/1-9)
- #
- #argument 3: fichier d origine (a crypter)
- #
- #argument 4: fichier de destination (crypter)
- ######
-
- ####importation des librairies:
- import Crypto,hashlib,os,sys,string,gtk
- from Crypto.Cipher import AES
- from Crypto.Cipher import ARC2
- from Crypto.Cipher import ARC4
-
- ####definition pour le hash
- def checksum(message):
- return hashlib.sha224(message).hexdigest()
- ####definition pour le cryptage
- def crypt( message, Key='1a3b4c5e6d7f8g9h0i1j2k3l4m5n6o7p' ):
- if len(message)==0:
- return ""
- else:
- AESobj=AES.new(Key,AES.MODE_ECB)
- ARC2obj=ARC2.new(Key + Key )
- ARC4obj=ARC4.new(Key + Key + Key)
- m3=ARC4obj.encrypt(ARC2obj.encrypt(AESobj.encrypt(message)))
- return m3
- ####defintion pour le decryptage
- def decrypt( message, Key='1a3b4c5e6d7f8g9h0i1j2k3l4m5n6o7p'):
- if len(message)== 0:
- return ""
- else:
- AESobj=AES.new(Key,AES.MODE_ECB)
- ARC2obj=ARC2.new(Key + Key )
- ARC4obj=ARC4.new(Key + Key + Key)
- m3=AESobj.decrypt(ARC2obj.decrypt(ARC4obj.decrypt(message)))
- return m3
-
- ####adaptation de la longeur du message pour qu il soit multiple de 16 (plus ajout du hash)
- def adaptline(line,div):
- pre_chk=checksum(line)
- lena=len(line+pre_chk)
- addnb=((((lena/div)+1)*div)-lena)
- if addnb>0 and addnb<10: addnb=addnb+div
- lenad=len(str(addnb))
- nline= str(addnb) + ((addnb-lenad) * " ") + line + pre_chk
- return nline
- ####suppression des caracteres ajouter lors de l'adaptation (plus verification du hash)
- def realeaseline(line):
- n=line[0:2:1]
- new=line[int(n):int(len(line)):1]
- message=new[0:len(new)-56:1]
- chk=new[len(new)-56::1]
- if checksum(message)==chk:
- return message
- ####fonction de cryptage pour un fichier
- def cryptfile(original_filename, Key , destination_filename):
- line_file= ""
- FILE_O = open(original_filename,"r")
- FILE_D = open(destination_filename,"w")
- for line in FILE_O:
- line_file= line_file + line
- line_file=adaptline(line_file,16)
- crypt_line=crypt(line_file,Key)
- FILE_D.writelines(crypt_line)
-
- FILE_O.close()
- FILE_D.close()
-
- #fonctionde decryptage pour un fichier
- def decryptfile(original_filename, Key, destination_filename):
- line_file= ""
- FILE_O = open(original_filename,"r")
- FILE_D = open(destination_filename,"w")
- for line in FILE_O:
- line_file= line_file + line
- crypt_line=decrypt(line_file,Key)
- crypt_line=realeaseline(crypt_line)
- FILE_D.writelines(crypt_line)
- FILE_O.close()
- FILE_D.close()
-
- #fonction main
- if sys.argv[1] in ["c","C","Crypt","CRYPT"]:
- cryptfile(sys.argv[3],sys.argv[2],sys.argv[4])
- else:
- decryptfile(sys.argv[3],sys.argv[2],sys.argv[4])
-
#argument 1: ['c','C','Crypt','CRYPT'] pour crypter
# quoique ce soit d'autre pour decrypter
#
#argument 2: cle à utiliser pour crypter ou decrypter (multiple de 16 caractères) (A-Z/a-z/1-9)
#
#argument 3: fichier d origine (a crypter)
#
#argument 4: fichier de destination (crypter)
######
####importation des librairies:
import Crypto,hashlib,os,sys,string,gtk
from Crypto.Cipher import AES
from Crypto.Cipher import ARC2
from Crypto.Cipher import ARC4
####definition pour le hash
def checksum(message):
return hashlib.sha224(message).hexdigest()
####definition pour le cryptage
def crypt( message, Key='1a3b4c5e6d7f8g9h0i1j2k3l4m5n6o7p' ):
if len(message)==0:
return ""
else:
AESobj=AES.new(Key,AES.MODE_ECB)
ARC2obj=ARC2.new(Key + Key )
ARC4obj=ARC4.new(Key + Key + Key)
m3=ARC4obj.encrypt(ARC2obj.encrypt(AESobj.encrypt(message)))
return m3
####defintion pour le decryptage
def decrypt( message, Key='1a3b4c5e6d7f8g9h0i1j2k3l4m5n6o7p'):
if len(message)== 0:
return ""
else:
AESobj=AES.new(Key,AES.MODE_ECB)
ARC2obj=ARC2.new(Key + Key )
ARC4obj=ARC4.new(Key + Key + Key)
m3=AESobj.decrypt(ARC2obj.decrypt(ARC4obj.decrypt(message)))
return m3
####adaptation de la longeur du message pour qu il soit multiple de 16 (plus ajout du hash)
def adaptline(line,div):
pre_chk=checksum(line)
lena=len(line+pre_chk)
addnb=((((lena/div)+1)*div)-lena)
if addnb>0 and addnb<10: addnb=addnb+div
lenad=len(str(addnb))
nline= str(addnb) + ((addnb-lenad) * " ") + line + pre_chk
return nline
####suppression des caracteres ajouter lors de l'adaptation (plus verification du hash)
def realeaseline(line):
n=line[0:2:1]
new=line[int(n):int(len(line)):1]
message=new[0:len(new)-56:1]
chk=new[len(new)-56::1]
if checksum(message)==chk:
return message
####fonction de cryptage pour un fichier
def cryptfile(original_filename, Key , destination_filename):
line_file= ""
FILE_O = open(original_filename,"r")
FILE_D = open(destination_filename,"w")
for line in FILE_O:
line_file= line_file + line
line_file=adaptline(line_file,16)
crypt_line=crypt(line_file,Key)
FILE_D.writelines(crypt_line)
FILE_O.close()
FILE_D.close()
#fonctionde decryptage pour un fichier
def decryptfile(original_filename, Key, destination_filename):
line_file= ""
FILE_O = open(original_filename,"r")
FILE_D = open(destination_filename,"w")
for line in FILE_O:
line_file= line_file + line
crypt_line=decrypt(line_file,Key)
crypt_line=realeaseline(crypt_line)
FILE_D.writelines(crypt_line)
FILE_O.close()
FILE_D.close()
#fonction main
if sys.argv[1] in ["c","C","Crypt","CRYPT"]:
cryptfile(sys.argv[3],sys.argv[2],sys.argv[4])
else:
decryptfile(sys.argv[3],sys.argv[2],sys.argv[4])
Conclusion
Attention il faut utiliser une clé de 16 ou 32 caracteres !
Exemple
test1.dat contient : 'It s work !'
Lancer:'python cryde.py c aaaaaaaaaaaaaaaa test1.dat test2.dat'
pour crypté le contenu du fichier 'test1.dat' avec la clé 'aaaaaaaaaaaaaaaa' et mettre le resultat dans test2.dat
test2.dat contient alors: 'ɼGºé˜-áÅ;”‰©¤̶ 5;P”·à^L¸>A°Æ›aÑ ²üe^ÕJà 6Z"S¦v¨Ï%—K5ìðæ¾0¼*#"ÔͰ& #8220;n«'
Lancer:python cryde.py c aaaaaaaaaaaaaaaa test2.dat test1.dat
pour décrypter le contenu du fichier 'test2.dat' avec la clé 'aaaaaaaaaaaaaaaa' et mettre le résultat dans test1.dat
********************************************** ***************
Bonne journée à vous !
Sources du même auteur
Sources de la même categorie
Commentaires et avis
|
Derniers Blogs
[TECHDAYS2012] OUI J'Y SERAI![TECHDAYS2012] OUI J'Y SERAI! par JeremyJeanson
Bonsoir, Certes, je l'annonce avec un peu de retard, mais je serai effectivement au Techdays demain. Comme l'an dernier, je participerai au programme ATE (Ask The Expert). Si vous avez des questions Workflow, WCF, AppFabric ou plus généralement .net, n'hé...
Cliquez pour lire la suite de l'article par JeremyJeanson TFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICESTFS INTEGRATION TOOLS - SUIVI DES SYNCHRONISATIONS AVEC REPORTING SERVICES par vfabing
Afin de s'assurer du bon fonctionnement des différentes synchronisations effectuées par les TFS Integration Tools, 2 rapports sont présents dès l'installation. Il suffit alors d'effectuer les manipulations suivantes pour pouvoir les visualiser : Loca...
Cliquez pour lire la suite de l'article par vfabing CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT)CSS CONTENT STATE SELECTORS (PERSONNAL DRAFT) par FREMYCOMPANY
Bonjour à tous, Je viens de publier une proposition comprenant 5 pseudo-classes pour le CSS Working Group ayant trait à l'état de chargement d'un élément (ex: IMG,VIDEO,AUDIO,OBJECT pour l'HTML.). Si le c½ur vous en dit, vous pouvez retrouver cette p...
Cliquez pour lire la suite de l'article par FREMYCOMPANY MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ?MBA : POURQUOI FAIRE ET COMMENT LE CHOISIR ? par ROMELARD Fabrice
Formation initiale Durant la formation, le découpage classique est le suivant (je donnerai les équivalences Suisse lorsque je les connaîtrais) : Ecole primaire jusqu'au Collège : Formation générale permettant d'obtenir les méthodes...
Cliquez pour lire la suite de l'article par ROMELARD Fabrice Y'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENTY'A DES ERREURS QUI PEUVENT RENDRE LE DéVELOPPEUR VIOLENT par Aleks
Quand on a ce genre d'erreur sans log :
Et bas on a juste envie de choper le gas de Microsoft qu'a développé ça et lui foutre des baffes de Coboye ! ...
Cliquez pour lire la suite de l'article par Aleks
Forum
PYVISA PROBLèMEPYVISA PROBLèME par sandrine44
Cliquez pour lire la suite par sandrine44
Logiciels
Academy System (17.2.1.0)ACADEMY SYSTEM (17.2.1.0)Logiciel de gestion des établissements.
- élèves/étudiants (inscription, dossier, absence...)
-... Cliquez pour télécharger Academy System Easy-Planning (1.0.0.1)EASY-PLANNING (1.0.0.1)Basé sur les mêmes principes que MyPlanning, Easy-Planning permet de créer des plannings sous la ... Cliquez pour télécharger Easy-Planning COLLECTOR PLUS (3.00B)COLLECTOR PLUS (3.00B)COLLECTOR PLUS version 3.00B est un logiciel utilisant une base de données alimentée par :
- L... Cliquez pour télécharger COLLECTOR PLUS PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO (V7.4)PONAMEDIA TV DEVIENS HELLLOOO FLASH
LA TV SUR VOTRE ORDINATEUR.
Toute une plateforme Multi... Cliquez pour télécharger PONAMEDIA PREMIUM - HELLLOOO FLASH DEMO LettresFaciles 2011 (8.0.0.1)LETTRESFACILES 2011 (8.0.0.1)LettresFaciles est un logiciel facilitant la création et la rédaction de lettres types.
Son inte... Cliquez pour télécharger LettresFaciles 2011
|