Après plusieurs recherches sur le net pour faire dialoguer PHP avec une application Java qui utilise le cryptage AES-256, je vous offre une classe toute faite.
Elle prend en charge l'AES 128, 192, 256, selon la longeur de la clé que vous passerez, et tous les autres mode supporté par MCrypt.
Pour crypter en AES-256, on utilise l algorithme "MCRYPT_RIJNDAEL_128" en mode "MCRYPT_MODE_CBC" avec une clé de 32.
AES a une valeur fixe pour le "block size" et l'IV de 128 bits (16 chars). La seule valeur changeante est la taille de la clé selon le cryptage voulu: - AES 128 (key_size: 16, block_size: 16, iv_size: 16) - AES 192 (key_size: 24, block_size: 16, iv_size: 16) - AES 256 (key_size: 32, block_size: 16, iv_size: 16)
Explication longue en anglais (je me suis basé dessus pour faire la version courte):
http://www.chilkatsoft.com/p/php_aes.asp
Explications sur les modes d'opérations (ECB, CBC, CFB...) http://fr.wikipedia.org/wiki/Mode_d%27op%C3%A9ration_%28cryptographie%29
Cette classe a aussi une implémentation simple de la fonction OpenSSL "EVP_BytesToKey" qui n'existe pas en PHP et qui permet de dériver une donnée pour renvoyer une clé et un vecteur d'initialisation.
Etant donné qu'elle ne correspond pas tout à fait à la fonction originelle, je l'ai nommé "deriveKeyAndIV".
|