begin process at 2010 02 10 10:49:51
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Sécurité

 > CRYPTAGE (SIMPLE) AVEC CLE ALEATOIRE ET INTEGRE

CRYPTAGE (SIMPLE) AVEC CLE ALEATOIRE ET INTEGRE


 Information sur la source

Note :
7,5 / 10 - par 2 personnes
7,50 / 10

  • 1

  • 2

  • 3

  • 4

  • 5

  • 6

  • 7

  • 8

  • 9

  • 10
Catégorie :Sécurité Classé sous :cryptage, xor, rot, cesar Niveau :Initié Date de création :06/10/2005 Date de mise à jour :07/10/2005 09:30:51 Vu / téléchargé :10 697 / 803

Auteur : elguevel

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

 Description

Cliquez pour voir la capture en taille normale
Programme de cryptage de fichier simple puisque je n'utilise que la combinaison d'un Xor et d'un Rot (cryptage de cesars).
L'avantage c'est que je crypt des blocs de 4 octets avec chaque fois une clé différente et j'inclu la clé dans le fichier.

PS : C'est pas pour çà que c'est pas securisé, loin de là !

Source

  • {
  • ------------------------------------------------------
  • Unité de démonstration pour Delphi.fr
  • Unité de cryptage de fichier avec clé aléatoire
  • Ecrit Par LEVEUGLE Damien (c) 2005
  • ------------------------------------------------------
  • }
  • unit cryptage;
  • interface
  • uses SysUtils;
  • procedure Crypter ( FichierSource: string; FichierDestination : String );
  • procedure Decrypter( FichierSource: string; FichierDestination : String );
  • implementation
  • { Crypter un fichier }
  • procedure Crypter( FichierSource: string; FichierDestination : String );
  • var
  • BufSource : Array[1..4] of Char; // Notre morceau de fichier en mémoire
  • BufCrypte : Array[0..4] of Char; // Buffer crypter avec la clé ( BufCrypt[0] = clé )
  • SourceF, DestF : File;
  • CryptageKey : Byte; // Notre clé généré aleatoirement
  • Lu : Integer; // Nombre d'octet de fichier lu
  • Ecrit : Integer; // Nombre d'octet de fichier ecrit (pour verif. uniquement)
  • i : Integer; // Pour notre boucle
  • begin
  • Randomize;
  • Assign (SourceF, FichierSource); // On ouvre le fichier source
  • Reset (SourceF, 1);
  • Assign (DestF, FichierDestination); // On crée le fichier destination
  • Rewrite(DestF, 1);
  • repeat
  • FillChar( BufSource, SizeOf(BufSource), #0 ); // Initialise les buffers
  • FillChar( BufCrypte, SizeOf(BufCrypte), #0 );
  • CryptageKey := Random(255); // On crée notre clé
  • BlockRead( SourceF, BufSource, SizeOf( BufSource ), Lu ); // On lit un bloc de 2Ko de notre fichier source
  • BufCrypte[0] := Chr( CryptageKey ); // On insère la clé a l'index 0
  • for i := 1 to Lu do // on crypte ce bloc en insérant la clé devant le bloc
  • BufCrypte[i] := Chr( ( Ord( BufSource[i] ) xor CryptageKey ) + CryptageKey ); // Le reste on crypt simplement ( XOR + ROT )
  • if Lu > 0 then BlockWrite( DestF, BufCrypte, Lu + 1, Ecrit ); // On ecrit notre Bloc crypté
  • until ( ( Lu = 0 ) or ( ( Lu + 1 )<> Ecrit ) ); // On reprend un bloc de 2Ko
  • Close( SourceF ); // On ferme
  • Close( DestF ); // les fichiers ouverts
  • end;
  • { Decrypter un fichier }
  • procedure Decrypter( FichierSource: string; FichierDestination : String );
  • var
  • BufCrypter : Array[0..4] of Char; // Notre bloc crypter
  • BufDecrypt : Array[1..4] of Char; // Bloc decrypter
  • SourceF, DestF : File;
  • CryptageKey : Byte; // La clé
  • Lu : Integer;
  • Ecrit : Integer;
  • i : Integer;
  • begin
  • Assign (SourceF, FichierSource); // On ouvre nos fichiers
  • Reset (SourceF, 1);
  • Assign (DestF, FichierDestination); // Bla Bla ...
  • Rewrite(DestF, 1);
  • repeat
  • FillChar( BufCrypter, SizeOf(BufCrypter), #0 ); // Initialise les buffers
  • FillChar( BufDecrypt, SizeOf(BufDecrypt), #0 );
  • BlockRead( SourceF, BufCrypter, SizeOf( BufCrypter ), Lu ); // On lit le fichier crypté
  • CryptageKey := Ord( BufCrypter[0] ); // On recupère le premier caractère du bloc (c'est notre clé)
  • for i := 1 to (Lu - 1) do
  • BufDecrypt[i] := Chr( ( Ord( BufCrypter[i] ) - CryptageKey ) xor CryptageKey ); // Le reste on le decrypte grâce à la clé recupérée
  • if Lu > 0 then BlockWrite( DestF, BufDecrypt, (Lu - 1), Ecrit ); // Et comme pour le cryptage ba on ecrit notre bloc dans le fichier destination
  • // ( "Lu - 1" car notre bufferDecrypt commence à 1 alors que notre BufCrypter commence à 0 )
  • until ( ( Lu <= 0 ) or ( (Lu - 1) <> Ecrit ) );
  • Close( SourceF ); // On ferme tout .. bla bla
  • Close( DestF );
  • end;
  • end.
{
 ------------------------------------------------------

    Unité de démonstration pour Delphi.fr

    Unité de cryptage de fichier avec clé aléatoire
    Ecrit Par LEVEUGLE Damien (c) 2005

 ------------------------------------------------------
}

unit cryptage;

interface

uses SysUtils;

procedure Crypter  ( FichierSource: string; FichierDestination : String );
procedure Decrypter( FichierSource: string; FichierDestination : String );

implementation

{ Crypter un fichier }
procedure Crypter( FichierSource: string; FichierDestination : String );
var
    BufSource : Array[1..4] of Char;         // Notre morceau de fichier en mémoire
    BufCrypte : Array[0..4] of Char;         // Buffer crypter avec la clé ( BufCrypt[0] = clé )

    SourceF, DestF : File;

    CryptageKey : Byte; // Notre clé généré aleatoirement

    Lu    : Integer;    // Nombre d'octet de fichier lu
    Ecrit : Integer;    // Nombre d'octet de fichier ecrit (pour verif. uniquement)

    i : Integer;        // Pour notre boucle

begin

    Randomize;

    Assign (SourceF, FichierSource);          // On ouvre le fichier source
    Reset  (SourceF, 1);

    Assign (DestF, FichierDestination);       // On crée le fichier destination
    Rewrite(DestF, 1);

    repeat

        FillChar( BufSource, SizeOf(BufSource), #0 ); // Initialise les buffers
        FillChar( BufCrypte, SizeOf(BufCrypte), #0 );

        CryptageKey := Random(255);             // On crée notre clé

        BlockRead( SourceF, BufSource, SizeOf( BufSource ), Lu );     // On lit un bloc de 2Ko de notre fichier source

        BufCrypte[0] := Chr( CryptageKey );  // On insère la clé a l'index 0

        for i := 1 to Lu do        // on crypte ce bloc en insérant la clé devant le bloc
            BufCrypte[i] := Chr( ( Ord( BufSource[i] ) xor CryptageKey ) + CryptageKey );   // Le reste on crypt simplement ( XOR + ROT )

        if Lu > 0 then BlockWrite( DestF, BufCrypte, Lu + 1, Ecrit );        // On ecrit notre Bloc crypté

    until ( ( Lu = 0 ) or ( ( Lu + 1 )<> Ecrit ) );        // On reprend un bloc de 2Ko

    Close( SourceF );     // On ferme
    Close( DestF   );     // les fichiers ouverts

end;


{ Decrypter un fichier }
procedure Decrypter( FichierSource: string; FichierDestination : String );
var
    BufCrypter : Array[0..4] of Char;    // Notre bloc crypter
    BufDecrypt : Array[1..4] of Char;    // Bloc decrypter

    SourceF, DestF : File;

    CryptageKey : Byte;                     // La clé

    Lu    : Integer;
    Ecrit : Integer;

    i : Integer;

begin

    Assign (SourceF, FichierSource);        // On ouvre nos fichiers
    Reset  (SourceF, 1);

    Assign (DestF, FichierDestination);     // Bla Bla ...
    Rewrite(DestF, 1);

    repeat

        FillChar( BufCrypter, SizeOf(BufCrypter), #0 );     // Initialise les buffers
        FillChar( BufDecrypt, SizeOf(BufDecrypt), #0 );

        BlockRead( SourceF, BufCrypter, SizeOf( BufCrypter ), Lu );   // On lit le fichier crypté

        CryptageKey := Ord( BufCrypter[0] );    // On recupère le premier caractère du bloc (c'est notre clé)

        for i := 1 to (Lu - 1) do
            BufDecrypt[i] := Chr( ( Ord( BufCrypter[i] ) - CryptageKey ) xor CryptageKey );    // Le reste on le decrypte grâce à la clé recupérée

        if Lu > 0 then BlockWrite( DestF, BufDecrypt, (Lu - 1), Ecrit );     // Et comme pour le cryptage ba on ecrit notre bloc dans le fichier destination
                                                            // ( "Lu - 1" car notre bufferDecrypt commence à 1 alors que notre BufCrypter commence à 0 )
    until ( ( Lu <= 0 ) or ( (Lu - 1) <> Ecrit ) );

    Close( SourceF );       // On ferme tout .. bla bla
    Close( DestF   );

end;

end.

 Conclusion

1) Vous pouvez changer la taille du bloc d'octet à codifier simplement (suffit de changer la valeur max dans les "Arrays" sans touché au code).

2) Vous pouvez modifier la methode de cryptage en combinant des Xor et des Rot comme il vous convient, et vous pouvez meme faire une opération de cryptage sur la clé si çà vous chante :-)

3) Marche parfaitement avec tout type de fichier ( j'ai même testé avec des Zip et des EXE).

Bon Code

Damien.

 Fichier Zip

Les Membres Club peuvent télécharger directement un fichier contenu dans le zip sans télécharger le zip en entier !

Télécharger le zip


 Historique

06 octobre 2005 16:12:24 :
Correction d'un problème à l'upload de la source
07 octobre 2005 09:30:51 :
Ajout d'un projet à la source Ajout du ScreenShoot de l'application Modification des commentaires

 Sources du même auteur

Source avec Zip METHODE DE PROPAGATION D'UNE APPLICATION
Source avec Zip Source avec une capture GERER LES SERVICES DE WINDOWS AVEC WINSVC
Source avec Zip Source avec une capture WAKE ON LAN
Source avec Zip Source avec une capture POUR LES DEBUTANTS : NETTOYAGE RECURSIF
Source avec Zip INJECTER DLL DANS UN PROCESSUS EN COURS

 Sources de la même categorie

Source avec Zip Source avec une capture GOLDEN PASSWORDS - STOCKEZ VOS MOTS DE PASSE ! par Bacterius
Source avec Zip Source avec une capture LEA EN MODE CHIFFREMENT (SEA) par Bacterius
Source avec Zip Source avec une capture DELPHI : SHA-1 EN MODE CHIFFREMENT (SHACAL) par FENETRES
Source avec Zip SECUSB ; LOGICIEL D'EFFACEMENT SÉCURISÉ POUR CLEF USB par ludodelphi
Source avec Zip PROTECTION COPIE CD, OU PROGRAMME SUR DONGLE USB par Huugooo

 Sources en rapport avec celle ci

Source avec Zip Source avec une capture GOLDEN PASSWORDS - STOCKEZ VOS MOTS DE PASSE ! par Bacterius
Source avec Zip Source avec une capture LEA EN MODE CHIFFREMENT (SEA) par Bacterius
Source avec Zip Source avec une capture SOUNDCRYPT par craftsystem
Source avec Zip Source avec une capture CRYPTEUR / DÉCRYPTEUR DE FICHIERS par Romano58
DÉCRYPTER LES FICHIERS IMAGE JPG (VOUS AVEZ ÉGARÉ LA CLÉ) par japee

Commentaires et avis

Commentaire de MAURICIO le 06/10/2005 17:51:29

Tu aurais pu faire un projet pour que l' on puisse tester...
Si j' ai bien compris le code, ta clé est gardée dans le fichier crypté. Donc, si tu m' envoies un fichier crypté par mail et que quelqu' un intercepte le fichier, il lui suffit d' avoir le programme de décryptage pour décrypter le fichier.
Je vois pas l' intérêt d' avoir une clé si celle-ci est jointe au fichier crypté.

Si tu veux des sources sur le cryptage (fichiers/chaines/stream) avec des clés séparées du fichier crypté (c' est quand même mieux non?), et bien voilà:
-ça a commencé ici: http://www.mandragor.org/tutoriels/article.php?id=9
-puis il y a eu ça: http://www.delphifr.com/code.aspx?id=27902
-puis les fichiers: http://www.delphifr.com/code.aspx?id=28088
-et enfin le compo: http://www.delphifr.com/code.aspx?id=28108

Voilà!

Commentaire de elguevel le 06/10/2005 22:07:23

Tu es dur avec moi...

Je peux faire un projet si tu veux mais bon les fonctions sont assez explicite et toutes prêtes, pas besoin de decortiquer un projet pour les sortirs, ya plus qu'a copier coller (c'est surtout pour faciliter la tache pour les debutants).

Mais tu as résond j'aurai pu mettre un projet avec ! Je vais le faire d'ailleur ..

Tu dit aussi .. il suffit d'avoir le programme de décryptage pour decoder le message, mais là désolé je peux aussi te dire, il suffit d'avoir la clé sur un cryptage traditionel pour le decrypter.
Ce que je veux dire c'est que la clé étant differente tout les 4 octets, avant de savoir que la clé est dedans, qu'elle change, et que c'est tout les tant d'octet, tu peux t'accrocher ! Enfin moi je defi qqn qui ne conné pas le truc de casser le cryptage aussi rapidement qu'un cryptage classique.

Et puis c'etait histoire de trouver un truc un peu plus original que des cryptages de fichier avec les memes methodes sans cesse ressassé !

Et puis je suis sur que dans certains cas cela peux se reveler utile...

Pour MAURICIO : Désolé j'ai toujours pas pu jetter un oeil sur tes corrections (BDD ADO), mais en ce moment c'est un peu le rush là pour moi, mais promis dès que possible je te repond !

@+

Damien

Commentaire de elguevel le 06/10/2005 22:15:50

Sinon MAURICIO, bravo pour tes sources ... je vois que tes connaissances depassent largement les Bases de données ;-)

Commentaire de elguevel le 07/10/2005 09:46:45

Je relis mon poste là et j'mapperçoi qu'effectivement ... ma source ne présente que peux d'interet pour une utilisation collective :s

Le fichier est crypté, mais ... pas sécurisé.

Mais pourquoi j'ai fait çà au faite ? :s (j'était fatigué hier je croit)

Bon j'vais passé a autre chose, j'fait trop des trucs qui servent a rien en ce moment

Damien

Commentaire de MAURICIO le 07/10/2005 10:28:35

Je ne pense pas que ta source ne sert à rien sinon je n' aurai pas mis 7/10.
Je dis juste que la clé dans le fichier crypté n' est pas la bonne solution et que tu aurai dû faire un projet.
En tout cas, c' est une source qui a le mérite de faire differemment d' où le 7/10 ...
VoilÀ A+

Commentaire de jjnouiphp le 01/12/2005 00:51:42

bonjour,
après les remarques de Mauricio, je me suis plongé dans le source d'Elguevel et l'ai un peu modifié
ce sont maintenant 2 fonctions crypte et decrypte qui travaillent sur un string et où chaque caractère codé est précédé de sa clé : sortie 2 fois plus longue que l'entrée mais la clé change à chaque caractère qu'en pensez-vous ?

Commentaire de elguevel le 01/12/2005 19:00:19

arf par pitié .. j'ai fait une connerie en faisant ce programme ... n'en rajoutez pas lol

Na faudrai faire un cryptage aleatoire mais separer la clé, dans un aure fichier par exemple... on aurai deux fichiers !

Commentaire de MAURICIO le 02/12/2005 10:42:14

Exact, je vous renvoie donc à mes sources sur le cryptage de string et de fichiers où la clé peut avoir la taille que vous voulez !!!  A+

Commentaire de pic16f le 25/01/2009 13:13:43

Bonjour


J'ai une carte électronique a base d'un microcontrôleur et une eeprom externe,le programme qui me sert de terminal qui se sert du port usb du PC ,qui me sert a visualiser
Les données contenue dans la mémoire et aussi a  les effacées.

Mon problème c'est que les données sont cryptées, je pense qu'ils sont stockes dans l'eeprom en claire, et le microcontrôleur va les crypter avant de les transmettre au PC.

Un exemple :

ªªªõñ??Vü@?_ªõQ?R?5?ÖñûkeÒÅLÝ/,7á_Yn_.|7M'(F69^)oa/n}
L1)|7!_n{.n|M`©ÖñÏkRÒF.JMW8(4puo"2v}e.<xa.>xg*:~e}R|nN
\|nL2"
Z_õQ?LiX,
ZNkX
.ZLiX,jmZzjJkf
(niZDht5D~RH0f`lr/dzpH4+DzVR3XDTJ)DxVPlDjJ/D~hPlDlJ)DxVRf_õQ?-@`tH6+BzT\-Nbhtd@V^/JbVvbBVZlnVp-dLV|2XB^tXHzt4XB\tNDR|2fB^tJDRFjjzX-`pxX29JjxZ23XJzt83_õQ?)RjzZVjfDVtfFHÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿÿ
Pour le texte en claire :
1212131323323434=45454556567878989890
Je peux me servir du programme et sauvegarder les données comme je souhaite Le problème c'est la réception des données qui sont cryptes.
Et change a chaque relecture pour un même texte, la relecture sera toujours différente ?
Merci de votre aide

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

Cryptage MD2 MD4 MD5 [ par MAsterC ] Bonjour à tous! J'ai Delphi 7 et Borland C++ Builder 6 puis dans le logiciel C++ de Borland dans l'onglet "Indy - Divers" il y a Les composant de Cryptage MD5 [ par Kruger ] Bonjour tous le monde, je suis en train de develloper une petite application sous delphi 6 entreprise dont une partie est "protégée" par un mots de p cryptage windows [ par ralfspark ] salut a tous j ai crypte certains fichier dans windows (comme mes photos), et apres reinstalation je ne peut plus les lire, que doit je faire ?merci cryptographie XOR [ par MoveX ] procedure TForm1.Button1Click(Sender: TObject);varn: Integer;begin Memo2.Clear; for n:=0 to Length(Memo1.Text) do begin if Length(Mem cle de 128 bits et cryptage [ par MoveX ] une cle de 128 bits en cryptage ca correspond a quoi? je veux dire, ca n est pas une cle de 128 caracteres? Cryptage en 27 caractères, méthode de substitution [ par cycy07 ] Bonsoir, est il possible d'utiliser la&nbsp;m&#233;thode de substitution pour une chaine de caract&#232;re utilisant les 26 lettres de l'alphabet+le b Cryptage/Décryptage [ par cycy07 ] Bonjour, je dois pouvoir cr&#233;er une application selon la m&#233;thode de substitution (C&#233;sar) , il s'agit donc de pouvoir entrer un message & Problème de cryptage ... [ par cycy07 ] bonjour, j'aimerais savoir comment m'y prendre pour r&#233;aliser un programme de codage par transposition en bloc de 8 caract&#232;res???Ce code doit ETNA 2.0 : Accès facile aux bases de données réseau [ par maxpiton4D ] Apr&#233;s beaucoup de travail, ETNA 2.0 est sortie ! ETNA signifie Easy daTabase Network Access, (soit Acc&#233;s Facile aux Bases de Donn&#233;es R& Cryptage à clé Symétrique [ par evay16 ] Bonjour,Voila, j'aimerai savoir, en terme de cryptage, si un texte (d'une longueur d'environs 10 caractères) chiffré avec une clé symétrique d'une lon


Nos sponsors


Sondage...

CalendriCode

Février 2010
LMMJVSD
1234567
891011121314
15161718192021
22232425262728

Consulter la suite du CalendriCode

 
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,576 sec (4)

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