|
|
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).
User Contributed Notes Chiffrage mcrypt |
|
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(
|
|
|
| |