LIV. Chiffrage mcrypt

Ces fonctions utilisent mcrypt .

Ces fonctions permettent d' accéder à la librairie mcrypt , qui dispose d'une grande variété d'algorithmes de chiffrage , tels que DES , TripleDES , Blowfish (par défaut ) , 3-WAY , SAFER-SK64 , SAFER-SK128 , TWOFISH , TEA , RC2 et GOST en modes CBC , OFB , CFB et ECB . De plus , elle accepte aussi RC6 et IDEA qui sont considérés comme " non libre " .

Si vous compilez PHP avec la librairie libmcrypt 2.4.x , les algorithmes suivants sont supportés : CAST , LOKI97 , RIJNDAEL , SAFERPLUS , SERPENT ainsi que les chiffrements suivants : ENIGMA ( chiffrage ) , PANAMA , RC4 et WAKE . Avec libmcrypt 2.4.x un autre mode de chiffrement est disponible : nOFB .

Pour l' utiliser , téléchargez la librairie libmcrypt-x.x.tar.gz par ici et suivez les instructions d 'installations incluses . Vous aurez aussi besoin de compiler PHP avec le paramètre --with-mcrypt pour activer cette extension .

Mcrypt permet de chiffrer et de déchiffrer , en utilisant les méthodes mentionnées ci-dessus . Les 4 commandes importantes mcrypt_cfb( ) , mcrypt_cbc( ) , mcrypt_ecb( ) et mcrypt_ofb( ) ) peuvent toutes opérer en mode MCRYPT_ENCRYPT et MCRYPT_DECRYPT .

Exemple 1 . Chiffre une valeur avec un TripleDES , en mode ECB .

 
?php

 
$key

 
=

 
"

 
Cette

 
cle

 
est

 
ultra-secrete"

 
;

 
$input

 
=

 
"Rencontrons-nous

 
dans

 
notre

 
place

 
secrete

 
a

 
9

 
h

 
00

 
."

 
;

 
$encrypted_data

 
=

 
mcrypt_ecb(MCRYPT_TripleDES

 
,

 
$key

 
,

 
$input

 
,

 
MCRYPT_ENCRYPT)

 
;

 
?



Cet exemple va retourner les données cryptées dans la variable $encrypted_data.

Si vous avez compilé PHP avec libmcrypt 2.4.x , ces fonctions sont toujours disponibles , mais il est vivement conseillé d ' utiliser les nouvelles fonctions avancées .

Exemple 2 . Encryption d ' une valeur avec TripleDES sous 2.4.x en mode ECB

 
?php

 
$key

 
=

 
"

 
Ceci

 
est

 
une

 
vraie

 
cle

 
secrete"

 
;

 
$input

 
=

 
"Rendez-vous

 
à

 
9

 
heures

 
,

 
dans

 
notre

 
planque

 
."

 
;

 
$td

 
=

 
mcrypt_module_open

 
(MCRYPT_TripleDES

 
,

 
""

 
,

 
MCRYPT_MODE_ECB

 
,

 
"")

 
;

 
$iv

 
=

 
mcrypt_create_iv

 
(mcrypt_enc_get_iv_size

 
($td)

 
,

 
MCRYPT_RAND)

 
;

 
mcrypt_generic_init

 
($td

 
,

 
$key

 
,

 
$iv)

 
;

 
$encrypted_data

 
=

 
mcrypt_generic

 
($td

 
,

 
$input)

 
;

 
mcrypt_generic_end

 
($td)

 
;

 
?



Cet exemple va retourner les données cryptées dans la variable $encrypted_data .

Mcrypt peut opérer en 4 modes de chiffrage ( CBC , OFB , CFB , et ECB ) . Nous allons présenter la technique d ' utilisation de ces modes . Pour plus de références et de détails , reportez-vous au livre suivant : Applied Cryptography par Schneier ( ISBN 0-471-11709-9 ) .

  • ECB ( electronic codebook ) ECB (electronic codebook ) est prévu pour des données aléatoires , telles que des clés . Etant donné que les données sont peu nombreuses et aléatoires , les inconvénients de l ' ECB ont ici un effet négatif favorable .

  • CBC ( cipher block chaining ) est spécialement pratique avec les fichiers dont la sécurité ECB n 'est pas suffisante .

  • CFB ( cipher feedback ) est la meilleure méthode pour chiffrer des flots d 'octets , quand les octets doivent être encryptés un par un .

  • OFB ( output feedback ) est comparable à CFB , mais peut être utilisé lorsque des erreurs ne doivent pas être propagées .

  • nOFB ( output feedback , in nbit ) est comparable à OFB , mais plus sûr , car il opère avec la taille de blocs de l 'algorithme .

  • STREAM est un mode supplémentaire , pour permettre l' utilisation d ' algorithmes tels que WAKE ou RC4 .



PHP ne supporte par encore le chiffrage des flots d ' octets . Pour l' instant , PHP n 'accepte que le chiffrage de chaîne .

Pour obtenir la liste complète des modes de chiffrement , reportez vous aux derniers #define , dans le fichier mcrypt.h . En règle générale , vous pouvez accéder à une méthode de chiffrement avec l ' option MCRYPT_nomDuChiffrement .

Voici une liste non exhaustive des modes de chiffrement de l ' extension mcrypt . Si un chiffrement n' est pas dans cette liste , mais disponible dans la librairie , vous pouvez supposer que cette documentation est hors d 'âge .

  • MCRYPT_ARCFOUR_IV ( libmcrypt 2.4.x seulement )

  • MCRYPT_ARCFOUR ( libmcrypt 2.4.x seulement )

  • MCRYPT_DES_COMPAT ( libmcrypt 2.2.x seulement )

  • MCRYPT_ENIGMA ( libmcrypt 2.4.x seulement , alias de MCRYPT_CRYPT )

  • MCRYPT_IDEA ( payant )

  • MCRYPT_LOKI97 ( libmcrypt 2.4.x seulement )

  • MCRYPT_MARS ( libmcrypt 2.4.x seulement , payant )

  • MCRYPT_PANAMA ( libmcrypt 2.4.x seulement )

  • MCRYPT_RIJNDAEL_128 ( libmcrypt 2.4.x seulement )

  • MCRYPT_RIJNDAEL_192 ( libmcrypt 2.4.x seulement )

  • MCRYPT_RIJNDAEL_256 ( libmcrypt 2.4.x seulement )

  • MCRYPT_RC4 ( libmcrypt 2.2.x seulement )

  • MCRYPT_RC6 ( libmcrypt 2.4.x seulement )

  • MCRYPT_RC6_128 ( libmcrypt 2.2.x seulement )

  • MCRYPT_RC6_192 ( libmcrypt 2.2.x seulement )

  • MCRYPT_RC6_256 ( libmcrypt 2.2.x seulement )

  • MCRYPT_SAFERPLUS ( libmcrypt 2.4.x seulement )

  • MCRYPT_SERPENT ( libmcrypt 2.4.x seulement )

  • MCRYPT_SERPENT_128 ( libmcrypt 2.2.x seulement )

  • MCRYPT_SERPENT_192 ( libmcrypt 2.2.x seulement )

  • MCRYPT_SERPENT_256 ( libmcrypt 2.2.x seulement )

  • MCRYPT_SKIPJACK ( libmcrypt 2.4.x seulement )

  • MCRYPT_TEAN ( libmcrypt 2.2.x seulement )

  • MCRYPT_TRIPLEDES ( libmcrypt 2.4.x seulement )

  • MCRYPT_TWOFISH ( Pour les anciennes versions de mcrypt 2.x versions , ou mcrypt 2.4.x )

  • MCRYPT_TWOFISH128 ( TWOFISHxxx sont disponibles avec les nouvelles versions de 2.x , mais pas dans les versions 2.4.x )

  • MCRYPT_WAKE ( libmcrypt 2.4.x seulement )

  • MCRYPT_XTEA ( libmcrypt 2.4.x seulement )

Vous devez ( mode CFB et OFB ) ou pouvez (mode CBC ) fournir un vecteur d'initialisation (IV ) pour ces modes de chiffrement . IV doit être unique , et avoir la même valeur au chiffrement et au déchiffrement . Pour des données qui seront enregistrées après chiffrement , vous pouvez prendre le résultat d ' une fonction telle que MD5 , appliquée sur le nom du fichier . Sinon , vous pouvez envoyer IV avec les données chiffrées , ( reportez-vous au chapitre 9.3 de Applied Cryptography by Schneier (ISBN 0-471-11709-9 ) pour plus de détails sur le sujet ) .

Table des matières
mcrypt_cbc -- Chiffre/déchriffre des données en mode CBC
mcrypt_cfb -- Chiffre/déchiffre des données en mode CFB
mcrypt_create_iv -- Crée un vecteur d'initialisation à partir d'une source aléatoire.
mcrypt_decrypt -- Déchiffre un texte
mcrypt_ecb -- Chiffre/déchiffre des données en mode ECB
mcrypt_enc_get_algorithms_name -- Retourne le nom de l'algorithme
mcrypt_enc_get_block_size -- Retourne la taille de blocs d'un algorithme
mcrypt_enc_get_iv_size -- Retourne la taille du VI d'un algorithme
mcrypt_enc_get_key_size -- Retourne la taille maximale de la clé pour un mode
mcrypt_enc_get_modes_name -- Retourne le nom du mode
mcrypt_enc_get_supported_key_sizes -- Retourne un tableau contenant les tailles de clés acceptées par un algorithme
mcrypt_enc_is_block_algorithm_mode -- Teste le chiffrage par blocs d'un mode
mcrypt_enc_is_block_algorithm -- Teste le chiffrage par blocs d'un algorithme
mcrypt_enc_is_block_mode -- Teste si le mode retourne les données par blocs
mcrypt_enc_self_test -- Teste un module ouvert
mcrypt_encrypt -- Chiffre un texte
mcrypt_generic_deinit -- This function deinitializes an encryption module
mcrypt_generic_end -- Termine un chiffrage
mcrypt_generic_init -- Initialise tous les buffers nécessaires
mcrypt_generic -- Chiffre
mcrypt_get_block_size -- Retourne la taille de blocs d'un chiffrement.
mcrypt_get_cipher_name -- Lit le nom du chiffrement utilisé.
mcrypt_get_iv_size -- Retourne la taille du VI utilisé par un couple chiffrement/mode
mcrypt_get_key_size -- Retourne la taille de la clé d'un chiffrement.
mcrypt_list_algorithms -- Liste tous les algorithmes de chiffrement supportés
mcrypt_list_modes -- Liste tous les modes de chiffrement supportés
mcrypt_module_close -- Close the mcrypt module
mcrypt_module_get_algo_block_size -- Retourne la taille de blocs d'un algorithme
mcrypt_module_get_algo_key_size -- Retourne la taille maximale de clé
mcrypt_module_get_supported_key_sizes -- Returns an array with the supported keysizes of the opened algorithm
mcrypt_module_is_block_algorithm_mode -- Indique si un mode fonctionne par blocs
mcrypt_module_is_block_algorithm -- Indique si un algorithme fonctionne par blocs
mcrypt_module_is_block_mode -- Indique si un mode travaille par blocs
mcrypt_module_open -- Ouvre le module de l'algorithme et le mode à utiliser
mcrypt_module_self_test -- Teste un mode
mcrypt_ofb -- Chiffre/déchiffre des données en mode OFB
mdecrypt_generic -- Déchiffre