begin process at 2012 02 07 11:50:20
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité & cryptage

 > CRYPTE ET DECRYPTE UN FICHIER (AVEC HASH POUR VÉRIFICATION)

CRYPTE ET DECRYPTE UN FICHIER (AVEC HASH POUR VÉRIFICATION)


 Information sur la source

Note :
9 / 10 - par 1 personne
9,00 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Sécurité & cryptage Classé sous :crypt, AES, ARC2, ARC4, hash Niveau :Débutant Date de création :09/09/2010 Vu :5 300

Auteur : saigneurdushi

Ecrire un message privé
Site perso
Commentaire sur cette source (17)
Ajouter un commentaire et/ou une note

 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: 'É&#188;Gºé&#732;-áÅ;Â&#8221;&#8240;©&#164;&#822 5;P&#8221;·à^L&#184;>A°Æ&#144;&#8250;&#129;aÑ ²üe^ÕJ­à 6Z"S&#166;v¨Ï%&#8212;K5ìðæ&#190;0&#188;*#"Ô­ Ͱ& #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

LE GLOUTON ! [MANGE ET RECRACHE LES FICHIERS QU IL TROUVE D...
Source avec Zip Source avec une capture LISTING ET LOGS DES CONNEXIONS ET DECONNEXIONS DE MACHINES Q...
Source avec une capture PHOTO SATELLITE AVEC ARCHIVAGE
Source avec une capture PRENEUR DE CHOIX, PRISE DE DECISION, COMPARAISON D ELEMENT
Source avec une capture PÊCHEUR D'ADRESSE MAC :-)

 Sources de la même categorie

Source avec une capture GÉNÉRATEUR DE MOT DE PASSE PYTHON (CLI) par svmars
Source avec Zip Source avec une capture GÉNÉRATEUR DE MOT DE PASSE PYTHON / WXPYTHON par svmars
Source avec Zip CRYPTEUR CARRE DE POLYBE par Dipx
Source avec une capture HORAIRESRESTREINTS par lonewolfs
Source avec Zip HIDS EN PYTHON par KimbleMandel

 Sources en rapport avec celle ci

CREATION FICHIER + HASH MD5 par xtremejames183

Commentaires et avis

Commentaire de xeolin le 14/09/2010 02:36:56

donc si je lance ton script comme ça : cryde.py -h
il crash... ok.

Deplus ajouter ARC2 et ARC4 est inutile, et surtout donne une fausse impression de sécurité. (security by obscurity.. cf. Steve Gibson).

Et dans la lignée.. Pourquoi importer pyGTK ? et os..

Enfin pour ce genre de chose je te conseille d'utiliser la fonction buit-in de python hash(). Tu n'a pas besoin de truc super high-tech, au contraire en utilisant le checksum le plus simple on évite les problèmes.

Enfin, je chipotte ^^

Mais ce qui est important c'est que tu explique dans les commantaires ce que tes [ :: ] font, puisque c'est une source débutant, je pense que la majorité de ton audiance planchera sur ce point ^^

ensuite je te conseille de repacer ligne 86 par quelquechose comme cela :

try:
   if sys.argv[1].capitalize() in "ENCRYPTE":

l.87-90
except :
   print "usage ...."

Commentaire de saigneurdushi le 16/09/2010 17:20:12

Alors merci pour le commentaire :-)
Et pour être honnête je suis un noob en python et j ai donner cette source uniquement au cas elle ou une partie d'elle puisse être utile.

Pour ceux qui galereraient [du vecu =)] à savoir comment on découpe/tronque/inverse une string en python:
Des explication sur l'utilisation de "[::]" (équivalent aux fonctions Mid,Left,Right en VB) (permettant de récuperer une certaine partie d'une string par exemple) sont à ce point '<5.6. Sequence Types>' là  '<http://docs.python.org/library/stdtypes.html>'

Merci pour ces conseil Xeolin


Commentaire de xeolin le 16/09/2010 20:39:12 9/10

mirci !

Commentaire de direngrey le 23/10/2010 18:51:26

Bonjour tout le monde voilà je vous explique

je me suis fait voler mon compte msn j'ai donc utilisé un force brut pour avoir le code le probleme est que le code sort en MD5 et impossible pour moi de trouvé un décrypteur un simple qui fonctionne bien


z'oriez une solution svp???

Commentaire de xeolin le 23/10/2010 19:14:42

1er post = je suis un cracker (non pas en fait c'est mon compte, genre).
vous pouvez m'aider à le pirater, j'arrive pas a comprendre comment cracker du md5 (lolll noob) avec ton code qui sert à le génerer...

He bien, s'il n'y a pas de sand (ce qui arrive dans 99% des cas) utilise Milw0rm, oh mince il est fermé... Parceque c'est ILLEGAL ... NOOB

I HATE YOU SO MUCH...

mais bon si tu as une question constructive je serai toujours là pour toi ^^

//END of trolling

non mais francherment....

Xeolin

Commentaire de direngrey le 23/10/2010 19:34:15

XD merci pour le coms mais nan perso c'est la deuxieme adresse qu'on me chourre :s maiiiiiis si ya une autre soluc a la limite je la veut bien^^


t'est bizarre mais t'est simpa :D

Commentaire de saigneurdushi le 23/10/2010 21:22:42

>XEOLIN: lol comment tu part au qart de tour !
je lui offrirais qd mm un piste car dernièrement j ai eu un soucis relativement similaire, j avais oublier mon password root sur un linux, et j avoue que j'étais bien content que l'on me dise comment le réinitialiser (veridict!) Donc dans l'hypothèse ou DIRENGREY serais sincère je lui laisse un lien utile et la manière dont je suis arrivée à le trouver :-) Ne m en veut pas xeolin ! stp =)

>DIRENGREY: il est possible qu il y est des infos qui puisse t'interesser ici <http://www'dot'authsecu'dot'com/decrypter-dechiffrer-cracker-hash-md5/decrypter-dechiffrer-cracker-hash-md5'dot'php>
tu change les dot par des '.'
Pour la securité

Explications de comment ce lien est arrivée ici:
J ai ouvert Mozilla je suis aller sur 'www.google.fr' et j'ai chercher
'cracker un md5'
Ainsi la prochaine fois tu pourras realiser ta quête par toi même tel un jedi !

Bonne journée à vous !


PS:Solution sur le long terme:

Choisi de long mot de passe avec chiffre et lettre et au moins une majuscule et caractère spéciale.
Change le un p'tit peu souvent. =)
Soit prévoyant en évitant les endroits non sur sur le net (porn/hack/crack etc...)
et finalement passe à linux(free world) si ce n'est pas déjà fait.
+++

Commentaire de xeolin le 24/10/2010 02:16:32

:p

ce qui faut que vous compreniez c'est que dans 99% des cas ils utilisent du sand, ce que je vais t'expliquer :

imagine que ton mot de passe est :  0123
le md5 peut facilement être cracker grâce a des rainbow-tables (comme milw0rm); or le logiciel encrypte ça : sandtest0123encoredusand
et à moins de faire du brutforce, tu ne le trouvera pas, souvant le sand est aléatoire ~~
Surtout dans le cas de MSN, normallement le sand est plutôt fort...


En tout cas si tu veux faire du bruteforce je te conseille d'utiliser un md5 cracker qui utilise la puissance de ton GPU, du ONPENCL (oui,oui pas onpengl, OPEN_C_L) ou CUDA si tu as une carte de marque NVIDIA..

Oups un lien :http://bvernoux.free.fr/md5/index.php

Oui c'est vrai je suis partit au quart de tour, mais c'est que je pensait que c'était encore ce coding kid; je vous copie un de ses message privé :

Message envoyé par Udrev le 01/07/2010 15:02:00 (Ajouter dans votre carnet d'adresses)

Sujet : hacker

Message :
slt,
jai 14 ans et je ve devenir hacker
jé vu que tu savai b1 faire de l' informatiques.
estce ke tu pouvais me doner des consels pour hac3er un msn ?
merci


ARGH ! je hai ses gamins... Ils te disent que c'est des hacker.. Pour comprendre il faut voir cette exélente video fait par Darren Kitchen pour Discovery channel.. Oups encore un lien : http://www.youtube.com/watch?v=w0u_7DHuuNg

En tout cas..  direngrey tu peux chopper mon msn sur mon site : http://N3ar.co.cc

Si tu veux je peux te présenter à des personnes (~.~) [if you want to get your hand dirty]// END OF CRAPPY QUOTE

je pense que hak5.org a fait un épisode la dessus, cherche sur msn ^^

Anyways.. Ne pends pas pour example sa source :p ça ne sertvira a rien; ça a juste pas rapport ^^

PS : N'écoute pas saigneurdushi; utilise keepass, et fait des backup, aussi c'est une bonne idée d'utilkiser des clef générées aléatoirement :p

Nate

Commentaire de saigneurdushi le 24/10/2010 13:35:07

:)
Perso je ne suis pas fan de ce genre de soft qui rassemble les password (comme keepass), ca les rassemble trop au mm endroit c'est bien la le principale défault. Question de point de vue apres tout ! =)
Bonne journée

Commentaire de xeolin le 24/10/2010 22:15:09

Bien c'est mieux que d'avoir un seul mot de passe pour tout tes comptes...

Commentaire de direngrey le 25/10/2010 20:33:47

xeolin nan jsuis pas un goss de 14ans etc etc jsuis un peut  débutant dans tout ca mais j'ai passé la majorité depuis quelques années déjà mdr!!

Commentaire de xeolin le 26/10/2010 01:01:54

rohh, déso alors ~.~

Commentaire de aera group le 30/10/2010 22:38:35

Ah c'est pas possible, je part une semaine en vacance et à mon retour CS est devenu un repère de H4ckers ... Non mais franchement, il faut pas abusé, demander sur une source comment cracker Messenger ...

Qui puis est, je ne pense pas qu'il faille aider les script kiddies dans leurs problèmes ...

Xeolin a très bien expliqué le problème du sand (ou appeler technique du salage ...) que Microsoft utilise bien sur (oui ils font parfois de la merde, mais ce ne sont pas non plus des noobs).

Une attaque par dico me semble l'unique solution facile. Pas la peine de pleuré pour le script, tu l'auras pas de moi ...

Il y a une époque où il était dangereux de se dire Hackers ...

Commentaire de saigneurdushi le 01/11/2010 01:07:27

Ma source n'est pas utile à cet fin là !

Commentaire de aera group le 01/11/2010 10:08:34

Oui, j'en ai oublier la source !! :)
Sorry


Heu, je manque d'expérience en cryptage pour un bon critique, cela dit, ca fonctionne. Je vois que tu utilise le module Crypto (trop facile :p) c'est dommage toute la partie intéressante est cacher :(
Ça a l'intérêt de simplifier le code c'est sur.
Plein de petite amélioration possible a droite a gauche, comme par exemple lower pour tester des arguments (ca évide de devoir distinguer majuscules et minuscules) + quelques test pour vérifier la véracité des arguments.

Sinon bien trouver [::], ca fait plaisir a voir.

Commentaire de Bacterius le 05/12/2010 09:53:57

Remarques niveau crypto :
- on dit "salt" :p
- ne jamais, JAMAIS, rajouter des "couches" de chiffrement. Ca semble plus sûr, mais dans la grande majorité des cas, la sécurité ne change pas du tout, et parfois même elle diminue (exemple : si ARC est plus faible que AES, et c'est probable, il est peut-être possible de récupérer la clef de chiffrement depuis cet algo en contournant complètement AES ... et si la clef de ARC est liée à la clef d'AES, game over).
- bien pour l'utilisation de SHA224, faut arrêter avec le mythique md5 maintenant, pour un checksum ok mais dans le cadre de ta source il s'agit davantage d'un contrôle d'intégrité, qui ne doit pas être mis à mal par les récentes (ou pas) faiblesses de MD5. Donc +1 pour un bon hash. Si ça t'intéresse tu peux te renseigner sur Skein, c'est une fonction de hashage et un algorithme de chiffrement à bloc, peut aussi servir de générateur pseudo-aléatoire ou de chiffrement à flux .. (il y a une implémentation en Python, pySkein, qui fait à peu près tout ce que tu veux mais en encore plus efficace).
- "Attention il faut utiliser une clé de 16 ou 32 caracteres !" non, on ne doit pas restreindre l'utilisateur sur la clef, en général on prend le mot de passe textuel de l'utilisateur, on y ajoute un petit salt et on hash tout ça avec SHA256, et le hash résultat sert de clef pour le reste du programme. Ca fonctionne !

Bref quelques maladresses ici ou là, mais c'est normal quand on débute en crypto, sinon c'est un bon début :)

Cordialement, Bacterius !

Commentaire de saigneurdushi le 04/01/2011 22:43:00

Merci pour ces infos précieuses Bacterius :-)

 Ajouter un commentaire




Nos sponsors


Sondage...

CalendriCode

Février 2012
LMMJVSD
  12345
6789101112
13141516171819
20212223242526
272829    

Consulter la suite du CalendriCode

Photothèque

 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 1,310 sec (4)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales