SommaireTelecharger la documentationChapitre suivantChapitre precedent  

  .: News :.: Edito :.: Scripts :.: Forum :.: Erreurs :.: Jobs :. 
 
Sommaire

Référence des fonctions

Apache
Tableaux
Aspell
Nombres de grande taille
Compression Bzip2
Calendrier
Paiement CCVS
Support COM pour Windows
Objets
ClibPDF
Crack
CURL
Paiement Cybercash
CyberMUT : Crédit Mutuel
Administration Cyrus IMAP
Caractères
DBA
Dates et heures
dBase
DBM
dbx
DB++ Functions
Direct IO
Accès aux dossiers
DOM XML
.NET
Gestion des erreurs
FrontBase
FilePro
Système de fichiers
Forms Data Format
FriBiDi
FTP
Fonctions
Gettext (GNU)
GMP
HTTP
Hyperwave
ICAP
Iconv
Images
IMAP
Informix
InterBase
IRC
Java
LDAP
Email
Traitement de email
Mathématiques
Chaînes de caractères multi-octets
MCAL
Chiffrage mcrypt
Fonctions MCVE
Hash
Microsoft SQL Server
Ming pour Flash
Fonctions diverses
mnoGoSearch
mSQL
MySQL
Sessions Mohawk
Fonctions muscat
Réseau
Ncurses : fonctions de contrôle du terminal
Lotus Notes functions
ODBC unifié
Oracle 8
OpenSSL
Oracle
Ovrimos SQL
Entrées/sorties
Overload
PDF
Paiement par Verisign
Options PHP et informations
POSIX
PostgreSQL
Contrôle des processus
Exécution de programmes externes
Printer functions
Pspell
Readline (GNU)
Recode (GNU)
Expressions régulières compatibles Perl
qtdom
Expressions régulières
Sémaphores et gestion de la mémoire partagée
SESAM
Sessions
Mémoire partagée
Shockwave Flash
SNMP
Sockets
Chaîne de caractères
Sybase
URL
Variables
Fonctions vpopmail
API Windows 32 bits
WDDX
Analyseur syntaxique XML
XMLRPC
XSLT
YAZ
NIS
Zip (décompression)
Zlib (Compression)

6.53 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.
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$inputMCRYPT_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.
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_3DES

  • MCRYPT_ARCFOUR_IV (libmcrypt 2.4.x seulement)

  • MCRYPT_ARCFOUR (libmcrypt 2.4.x seulement)

  • MCRYPT_BLOWFISH

  • MCRYPT_CAST_128

  • MCRYPT_CAST_256

  • MCRYPT_CRYPT

  • MCRYPT_DES

  • MCRYPT_DES_COMPAT (libmcrypt 2.2.x seulement)

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

  • MCRYPT_GOST

  • 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_RC2

  • 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_SAFER64

  • MCRYPT_SAFER128

  • 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_THREEWAY

  • 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_TWOFISH192

  • MCRYPT_TWOFISH256

  • 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).

Sommaire


Chapitre précédentChapitre suivantAccueil nexen.net