Cryptage (1)
Introduction :

Il existe 2 familles de cryptage :

Le cryptage symétrique : la même clé est utilisée pour le cryptage et le décryptage.
C'est le système le plus simple (c'est cette solution qu'on retiendra pour nos exemples).

Le cryptage asymétrique : des clés différentes sont utilisées au cryptage et au décryptage.
On dispose alors d'une clé publique et d'une clé privée.

Cryptage Décryptage Utilisation
Public Prive Tout le monde peut vous écrire mais vous serez le seul à pouvoir lire les messsages.
Le cryptage sert à diffuser des messages secrets.
Prive Public Tout le monde peut lire vos messages mais vous serez le seul capable de les écrire.
Le cryptage sert à authentifier.

Description de quelques fonctions de QBasic

- Open : Fonction de lecture / écriture de fichiers, ici mode binaire (lecture octet par octet)
- Xor : Ou exclusif (fonction logique), voici sa table de vérité

Entrée 1 Entée 2 Résultat
0 0 0
0 1 1
1 0 1
1 1 0

Exemple :
5 Xor 6

5 = 0 1 0 1
6 = 0 1 1 0
Résultat 0 0 1 1

0011 = 3 en décimal donc 5 Xor 6 = 3

Un petit exemple de programme de cryptage / décryptage

Le programme demande une clé et un fichier puis va crypter/décrypter le fichier. La 1ere exécution va crypter le fichier, la seconde va le décrypter.

REM ---- Déclarations des variables ----
DIM car1 AS STRING * 1 DIM car2 AS STRING * 1
DIM code AS STRING * 16
DIM Clef(16)
CLS
REM ---- Saisie du fichier et de la clef ----
INPUT "Nom du fichier : ", file$
INPUT "Clef ( 16 cars ) : ", code
REM ---- On transforme les caractères de la clef en nombre (Code ASCII) ----
FOR i = 1 TO 16
Clef(i) = ASC(MID$(code, i, 1))
NEXT i
REM ---- Ouverture du fichier et d'un fichier tmp ----
OPEN file$ FOR BINARY AS #1
OPEN "file.tmp" FOR BINARY AS #2
REM ---- Initialisation des variables ----
i = 1
position = 1
REM ---- Algorithme de cryptage - décryptage ----
DO
  GET #1, position, car1
  car = ASC(car1)
  car0 = Clef(i) XOR car
  IF car0 < 0 THEN
    car0 = 0 - car0
  END IF
  Tmp = INT(car0 / 256)
  car0 = car0 - Tmp * 256
  car2 = CHR$(car0)
  IF EOF(1) = 0 THEN
    PUT #2, position, car2
  END IF
  position = position + 1
  i = i + 1
  IF i > 16 THEN
    i = 1
  END IF
LOOP UNTIL (EOF(1))
REM ---- Fermeture des fichiers ----
CLOSE
CLOSE
REM ---- Suppression du fichier à traiter qu'on remplace par le fichier temporaire ----
KILL file$
NAME "file.tmp" AS file$


Remarques

Comme vous pouvez le voir, l'algorithme de cryptage est basé sur la fonction Xor mais rien ne vous empêche de le faire avec une autre fonction mais il faut bien faire attention à ce que l'opération reste réversible.

Il est aussi possible d'utiliser un fichier à la place d'une clé saisie au clavier. L'avantage du fichier est la taille de la clé, plus elle sera longue, plus le cryptage sera fiable. D'ailleurs, un simple cryptage Xor est incassable si la taille de la clé est de la même taille que le fichier à crypter.


Tutoriaux - Cryptage (1) - Photographies, projects informatiques et tutoriaux de programmation.
Chandelier Japonais - Annonce immobilière maison - Sellette occasion - Logiciel de rendez-vous - Velo route occasion - Chat sans inscription - Masque - Pic petrolier