Les Snippets

Connexion

chiffrement de fichier en randxor.

Niveau requis pour utiliser/comprendre cette source : 2 ( Initié )
Créé le 01/04/2008 04:40:48 et initié par edfed [Liste]
Vue : 5116
Catégorie(s) : Cryptage
Langages dispo pour ce code :
- Assembleur x86
- Delphi 5
- Voir tous les langages pour ce code snippet



Langage : Assembleur x86
Date ajout : 01/04/2008
Posté par edfed [Liste]

;;;;;; données necessaires pour un bon fonctionnement
ckey: 
dd @f-$-4      ; directive brute force pour connaitre la taille d'un champ sous fasm.
db 'Mot de passe'
@@:              ; etiquette anonyme, utilisée pour la directive precedente 
dd 0  ; padding pour ne pas avoir d'erreur dans la mot de passe.        
filetocrypt:   ; peut etre n'importe quel fichier binaire
dd @f-$-4    ; respecter juste la structure autours du fichier.
file 'fichier à crypter .extension'  
@@:
dd 0  ; padding utilisé pour ne pas deborder
;;;;;; pour executer le code
...
        mov esi,ckey         ; charger le mot de passe
        call rnd1.init          ; initialiser le PRNG
        mov esi,filetocrypt  ; pointer le fichier a crypter
        mov edi,[esi]        ; en connaitre la taille
        add esi,4          
        call crypt              ; lancer le chiffrement, dechiffrement
...
;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;
;;;;;;;;;; petit algo de chiffrement;;;;;;;;;;;;;;;;
crypt:
        call rnd1         ; generer un nombre aleatoire
        xor [esi],ecx   ; appliquer le XOR sur le fichier
        inc esi            ; pointer au prochain char du fichier, probleme d'alignement, mais c'est pas grave...
        dec edi           ; decrementer le compteur
        jne crypt         ; si c'est pas la fin, continuer
        ret
;;;;;;;;; generateur pseudo aleatoire pour le chiffreur
rnd1:

        mov ecx,[.seed]
        add ecx,[.seed1]
        add ecx,[.seed2]
        add ecx,[.seed3]
        or ecx,1
        ror ecx,1
        add [.seed],ecx
        and cl,1
        shr ecx,cl
        adc [.seed1],ecx
        and cl,1
        shr ecx,cl
        adc [.seed2],ecx
        and cl,1
        shr ecx,cl
        adc [.seed3],ecx
        ret
;;;;;;;; initialisation du generateur aleatoire depuis un mot de passe en ascii
.init:
        push eax ebx ecx    
        mov ecx,[esi]          
        add esi,4
        mov [.seed],ecx    ; initialiser les graines avec la taille du mot de passe
        mov [.seed1],ecx
        mov [.seed2],ecx
        mov [.seed3],ecx
@@:
        movzx eax,byte[esi]  ; charger un char du mot de passe.
        movsx ebx,al
        ror ebx,16
        add eax,ebx
        add [.seed],eax 
        adc [.seed1],0  
        adc [.seed2],0  
        adc [.seed3],0   
        inc esi               
        dec ecx               
        jne @b                 
        pop ecx ebx eax    
        ret
align 4
.seed dd 0
.seed1 dd 0
.seed2 dd 0
.seed3 dd 0


Remarque :

bon, alors ceci es tun petit essai de cryptage de fichier avec fasm. ça marche bien, meme tres bien.

globalement, il suffit de changer de generateur aléatoire pour obtenir une meilleure securité.

mais je met au defit quiconque de casser un fichier crypté avec ce type de code.

le but est simple:

initialiser un PRNG avec un mot de passe avant cryptage/decryptage.

utiliser la sortie du PRNG pour faire un XOR sur le fichier au niveau du pointeur.

noter qu'il faut creer un champ taille au debut du mot de passe et du fichier.

le mot de passe peu faire jusqu'a 2^32-1 octet, totalement inutile...

la routine marche dans les deux sens en raison du XOR. il ne faut pas oublier d'initialiser le generateur avant.


enjoy!

PS, je ne sais pas si cette technique est deja utilisée quelque part, mais tant pis, on dira que je l'ai inventée... ;)



Snippets en rapport avec : Cryptage, Chiffrement, Pseudo aleatoire, Mot de passe, Assembleur fasm



Codes sources en rapport avec : Cryptage, Chiffrement, Pseudo aleatoire, Mot de passe, Assembleur fasm

{C / C++ / C++.NET} ELGAMALCIPHER
Ce programme est une implémentation du chiffrement asymétrique publié par Taher ElGamal en 1985. Ce...

{Delphi} LEA EN MODE CHIFFREMENT (SEA)
Bonjour, voici un exemple de ce que peut donner un algorithme de hachage en mode chiffrement (ce n'e...

{Visual Basic, VB6, VB.NET, VB 2005} CRYPTAGE PAR MASQUE JETABLE
Voilà, c'est mon premier programme (que j'ai fini) créé avec Visual Studio Express 2008. Je le poste...

{Visual Basic, VB6, VB.NET, VB 2005} CUBE SYSTEM
Algorythme de chiffrement a clef symétrique mdlCube.bas: -CLoad(filename) -CCrypt(Password) -C...

{JAVA / J2EE} CHIFFREMENT AES (ADVANCED ENCRYPTION STANDARD) 128 BITS
Bonjour, voici un petit code permettant d'appliquer un chiffrement AES 128bits sur un message rangé ...

{JAVA / J2EE} CHIFFREMENT RSA (RIVEST SHAMIR ADLEMAN)
Bonjour, je vous met une source qui permet de chiffrer un tableau de byte en RSA, j'utilise la class...

{ColdFusion} CRYPTAGE DE DONNÉES
Voici un CFX-TAG permettant le cryptage de données en utilisant l'API de Windows. Celui-ci est dév...

{JAVA / J2EE} STEGANOGRAPHIE & RSA, SWT
Cet utilitaire permet d'insérer des données dans une image bit map. Il propose aussi de chiffrer ...

{Delphi} HROT, COMPRESSION CODÉE DE FICHIER PAR CLEF 128BITS
HRot est une idée que j'ai depuis longtemps et avec le nombre de sources proposant des methodes de ...

{Python} CHIFFRE DE VIGENÈRE
Bonjour à tous ! Face au nombre un peu faiblard de codes disponibles en Python, j'ai décidé de dépos...