PHP 5.3 ha introducido un nuevo método de encriptación que es realmente fácil de usar: openssl_encrypt
y openssl_decrypt
. No está bien documentado aquí, así que aquí está un ejemplo sencillo:
$textToEncrypt = "My super secret information.";
$encryptionMethod = "AES-256-CBC"; // AES is used by the U.S. gov't to encrypt top secret documents.
$secretHash = "25c6c7ff35b9979b151f2136cd13b0ff";
//To encrypt
$encryptedMessage = openssl_encrypt($textToEncrypt, $encryptionMethod, $secretHash);
//To Decrypt
$decryptedMessage = openssl_decrypt($encryptedMessage, $encryptionMethod, $secretHash);
//Result
echo "Encrypted: $encryptedMessage <br>Decrypted: $decryptedMessage";
me eligió 256-AES porque es sólido y rápido. Ha sido adoptado por el gobierno de EE. UU. Para cifrar documentos secretos. Es rápido considerando la máquina y el software.Aquí hay una lista de métodos de encriptación disponibles:
AES-128-CBC, AES-128-CFB, AES-128-CFB1, AES-128-CFB8, AES-128-ECB, AES-128-OFB, AES- 192-CBC, AES-192-CFB, AES-192-CFB1, AES-192-CFB8, AES-192-ECB, AES-192-OFB, AES-256-CBC, AES-256-CFB, AES-256- CFB1, AES-256-CFB8, AES-256-ECB, AES-256-OFB, BF-CBC, BF-CFB, BF-ECB, BF-OFB, CAMELLIA-128-CBC, CAMELLIA-128-CFB, CAMELLIA- 128-CFB1, CAMELLIA-128-CFB8, CAMELLIA-128-ECB, CAMELLIA-128-OFB, CAMELLIA-192-CBC, CAMELLIA-192-CFB, CAMELLIA-192-CFB1, CAMELLIA-192-CFB8, CAMELLIA-192- BCE, CAMELLIA-192-OFB, CAMELLIA-256-CBC, CAMELLIA-256-CFB, CAMELLIA-256-CFB1, CAMELLIA-256-CFB8, CAMELLIA-256-ECB, CAMELLIA-256-OFB, CAST5-CBC, CAST5- CFB, CAST5-ECB, CAST5-OFB, DES-CBC, DES-CFB, DES-CFB1, DES-CFB8, DES-ECB, DES-EDE, DES-EDE-CBC, DES-EDE-CFB, DES-EDE- OFB, DES-EDE3, DES-EDE3-CBC, DES-EDE3-CFB, DES-EDE3-CFB1, DES-EDE3-CFB8, DES-EDE3-OFB, DES-OFB, DESX-CBC, RC2-40-CBC, RC2-64-CBC, RC2-CBC, RC2-CFB, RC2-ECB, RC2-OFB, RC4, RC4-40, SEED-CBC, SEED-CFB, SEED-ECB, SEED-OFB, aes-128-cbc, aes-128-cfb, aes-128-cfb1, aes-128-cfb8, aes-128-ecb, aes-128-ofb, aes-192-cbc, aes-192- cfb, aes-192-cfb1, aes-192-cfb8, aes-192-ecb, aes-192-ofb, aes-256-cbc, aes-256-cfb, aes-256-cfb1, aes-256-cfb8, aes-256-ecb, aes-256-ofb, bf-cbc, bf-cfb, bf-ecb, bf-ofb, camelia-128-cbc, camelia-128-cfb, camellia-128-cfb1, camelia-128- cfb8, camelia-128-ecb, camelia-128-ofb, camelia-192-cbc, camelia-192-cfb, camelia-192-cfb1, camelia-192-cfb8, camelia-192-ecb, camelia-192-ofb, camelia-256-cbc, camelia-256-cfb, camelia-256-cfb1, camelia-256-cfb8, camelia-256-ecb, camelia-256-ofb, cast5-cbc, cast5-cfb, cast5-ecb, cast5- ofb, des-cbc, des-cfb, des-cfb1, des-cfb8, des-ecb, des-ede, des-ede-cbc, des-ede-cfb, des-ede-ofb, des-ede3, des- ede3-cbc, des-ede3-cfb, des-ede3-cfb1, des-ede3-cfb8, des-ede3-ofb, des-ofb, desx-cbc, rc2-40-cbc, rc2-64-cbc, rc2- cbc, r C2-CFB, RC2-BCE, RC2-OFB, RC4, RC4-40, semilla-CBC, CFB-semilla, semilla-BCE, semilla-OFB
ACTUALIZACIÓN IMPORTANTE !!!
Gracias a Hobo y Jorwin por señalar que en PHP 5.3.3> hay un nuevo parámetro que hace que esta función sea un poco más segura.
Jorwin hace referencia en este enlace his comment, y aquí es un extracto que es aplicable:
En 5.3.3 se agregaron un nuevo parámetro, string $iv
(inicialización vector) parámetros reales son: string openssl_encrypt (string $data , string $method , string $password, bool $raw_output = false, string $iv)
Si falta $iv
, se emite una advertencia: "Usar un Vector de inicialización vacío (iv) es potencialmente inseguro y no recomendado".
Si $iv
es demasiado corto, otra advertencia: "IV pasado es sólo 3 bytes de longitud, cifrado espera un IV precisamente de 8 bytes, relleno con \ 0"
misma IV se debe utilizar en openssl_decrypt()
votaron en contra porque no creía que la conversación terminara siendo realmente sobre encriptación bidireccional ... –