PHP  
downloads | documentation | faq | getting help | | php.net sites | links 
search for in the  
previousmcal_week_of_yearmcrypt_cbcnext
Last updated: Tue, 11 Jun 2002
view this page in Printer friendly version | English | Brazilian Portuguese | Czech | Dutch | Finnish | German | Hungarian | Italian | Japanese | Korean | Polish | Romanian | Russian | Spanish | Turkish

LV. Chiffrage mcrypt

Ces fonctions utilisent .

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

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 -- Teste le chiffrage par blocs d'un algorithme
mcrypt_enc_is_block_algorithm_mode -- Teste le chiffrage par blocs d'un mode
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 -- Chiffre
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_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 -- Indique si un algorithme fonctionne par blocs
mcrypt_module_is_block_algorithm_mode -- Indique si un mode 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
User Contributed Notes
Chiffrage mcrypt
add a note about notes

30-Jun-1999 01:31

For a practical example suitable for encrypting and
validating cookies or passing secure messages,
go to 


10-Feb-2000 11:21

the encrypted result data maybe binary data and It make errors in sql
query.
so use the base64_encode/base64_decode function with mcrypt()
try below

base64_encode(mcrypt_ecb(MCRYPT_BLOWFISH,$key,$input,MCRYPT_ENCRYPT));

mcrypt_ecb(MCRYPT_BLOWFISH,$key,base64_decode($input),MCRYPT_DECRYPT);


11-Jun-2001 06:56

If you are interested to see a blowfish implementation written in plain
php, go to 

I was just testing if it is possible. Yes it is, but it's really slow and
unoptimized yet :( Maybe somebody knows how to speed the code up ?

Bye
Bjoern


27-Jun-2001 05:05

If you are trying to use mcrypt to encrypt and decrypt data for storing in
cookies, then you should use bin2hex() before storing the data. 
If you use rawurlencode() instead, then Internet Explorer does something
fishy with the cookie, and when you try and use mdecrypt on the cookie
later, the decrypt fails part way through.


18-Jul-2001 12:01

Mcrypt support in PHP has gone through cycles and it seems to have finally
leveled off. 

First, get libmcrypt-2.4.15 (well, that was the lastest as of today) and
compile it. Pay no attention to the mcrypt examples in this manual as most
of them will simply cause your web server to segfault. Here are some
functions that I hope will help others with mcrypt. 

PHP Manual Editor : Can you remove all the outdated comments and examples
from the manual? It was seriously confusing to get to the bottom of the
problems I had starting to use mcrypt and it's fairly straight forward
now, I just think the PHP manual needs some updating in this area. Note
that it seems Zend's manual pages have been updated as that's where I
finally got some working example code.

Thanks!!!
 


$sCryptoKey = "whatever";

	function
	my_encrypt($sString) {
	
		GLOBAL $sCryptoKey;
		
		$iIV = mcrypt_create_iv (mcrypt_get_iv_size (MCRYPT_RIJNDAEL_256,
MCRYPT_MODE_ECB), MCRYPT_RAND);
		
		$sEncrypted = mcrypt_encrypt (MCRYPT_RIJNDAEL_256, $sCryptoKey,
$sString, MCRYPT_MODE_ECB, $iIV);
		
		return($sEncrypted);

	} // End function my_encrypt

	function
	my_decrypt($sString) {

		GLOBAL $sCryptoKey;
		
		$iIV = mcrypt_create_iv (mcrypt_get_iv_size (MCRYPT_RIJNDAEL_256,
MCRYPT_MODE_ECB), MCRYPT_RAND);
		
		$sDecrypted = mcrypt_decrypt(MCRYPT_RIJNDAEL_256, $sCryptoKey, $sString,
MCRYPT_MODE_ECB, $iIV);
	
		return(trim($sDecrypted));
			
	} // End function my_decrypt


19-Jul-2001 02:34

According to the mcrypt manual page at 
, RC4 is not included with Mcrypt(as stated above). If anyone else is
looking for RC4, as I was, there is a PHP library at sourceforge.net
called RC4Crypt.


03-Aug-2001 12:37

If you compiled mcrypt and php without problem, but phpinfo() shows there
are no supported ciphers and modes, try to change mode to 755 on libdirs
(/usr/local/libmcrypt, /usr/local/libcrypt).


13-Aug-2001 06:12

The example2 contain this key:

$key = "this is a very secret key";

It's a 25 character length key and the max for TripleDES is 24
characters...


08-Feb-2002 04:45

I had some problems trying to link mcrypt module with PhP 4.1.1.
After sometimes, I figured that the PhP configure command incorrectly adds
mcrypt library to the LIBS
//Original code
#LIBS="-lmcrypt
#      -L$MCRYPT_DIR/lib
#     $LIBS"

// modify like this:
LIBS=$LIBS" -lmcrypt"
LIBS=" -L$MCRYPT_DIR/lib
     $LIBS"

Hope this helps,
Leon


17-Mar-2002 01:13

if you download 
you can use rc4 encryption with PHP 4.*.* on windows.

regester the dll by going to the directory and typing (regsvr32 rc4dll.dll)
use
<? $RC4 = new COM("RC4DLL.Crypt") or die("Unable to load RC4"); echo "(Hello World) encrypted with (My Key) as the key"; echo $RC4->EnCrypt("Hello World","My Key"); echo "\n"; echo "(x�+�0�б) encrypted with (My Key) as the key"; echo $RC4->EnCrypt("1�N\�-��","My Key"); ?>


28-Mar-2002 07:28

If you are using ECB mode to encrypt it does not seem to use the iv
(initialization vector) for much of anything, given the same key it will
always decrypt it no matter what the iv is.  If you use CBC mode you must
decrypt with the same iv that you encrypted with. 

 If you use a different iv before decrypting, your decrypt will not work. 
IMHO it seems better to use CBC mode than ECB as ECB will always encrypt
to the same cipher text given the same plain text  (leaving you open to
know plaintext attacks).  CBC uses the random iv which means text encrypts
to different things.  You probably could get the same effect from using
random keys in ECB mode.

Read that in the Schneier book - Applied Cryptography (ISBN 0-471-11709-9)
 This book is a must for anyone seriously using any type of encryption.

25-Jun-2002 11:20
If your a windows PHP user, you can download the Mcrypt Encryption
Functions for  in
a nice package.  Too bad their site is down right now   

        :o(

add a note about notes
previousmcal_week_of_yearmcrypt_cbcnext
Last updated: Tue, 11 Jun 2002
show source | credits | stats | mirror sites:  
Copyright © 2001, 2002 The PHP Group
All rights reserved.
This mirror generously provided by:
Last updated: Mon Jul 8 12:18:18 2002 CEST