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