Comment crypter une chaîne de caractères en PHP?
Je veux faire une fonction de chiffrement qui devrait avoir une certaine clé secrète. Quelque chose comme ce qui suit:
function encrypt($string) {
$key = "mastermind";
$enc = encryptfunc($string, $key);
return $enc;
}
La même chose devrait s'appliquer pour le décryptage.
- Vous ne devriez probablement pas rouler votre propre sécurité/fonctions de cryptage des données, sauf si vous savez vraiment ce que vous faites (ou d'apprentissage/expérimentation).
Vous devez vous connecter pour publier un commentaire.
Si vous utilisez PHP >= 5.3, la nouvelle
openssl_encrypt
peut vous aider: Il permet le cryptage des données à l'aide d'un large éventail de monogramme méthodes.Ces données peuvent ensuite être déchiffré qu'avec
openssl_decrypt
, ce qui, évidemment, fait exactement le contraire.Et si vous voulez savoir qui cypher fonctions que vous pouvez utiliser,
openssl_get_cipher_methods
sera utile 😉Il y a beaucoup de personnes, il semble ^^
Voici une portion de code que j'ai posté sur mon blog il y a quelques temps, qui devrait montrer l'utilisation de ces trois fonctions:
La sortie j'ai eu lors de l'écriture, c'était quelque chose comme ça:
Et si vous n'êtes pas à l'aide de PHP 5.3, vous voudrez peut-être jeter un oeil à la Mcrypt section du manuel, et les fonctions telles que
mcrypt_encrypt
😉Ici est simple, mais assurer la mise en œuvre de AES-256 de chiffrement en mode CBC qui utilise PBKDF2 pour créer la clé de cryptage de texte brut mot de passe et HMAC pour authentifier le message chiffré.
Il fonctionne avec PHP 5.3 et supérieur.
Utilisation:
Avis sur les performances
Par défaut mcrypt_create_iv() fonction utilise /dev/random comme une source de valeurs aléatoires. Si le serveur a une faible entropie de cette source peut être très lente. C'est pourquoi, /dev/urandom est utilisé.
Voici une bonne explication de ce qu'est la différence entre eux http://www.onkarjoshi.com/blog/191/device-dev-random-vs-urandom/
Donc, si vous n'êtes pas à l'aide de ce chiffrement pour quelque chose de critique (j'espère que vous ne le font pas), alors vous pouvez utiliser /dev/urandom pour améliorer les performances de chiffrement, sinon, il suffit de remplacer MCRYPT_DEV_URANDOM avec MCRYPT_DEV_RANDOM.
Importante mise à jour de sécurité #1
Grâce à @HerrK, qui a souligné que l'aide d'un simple hash pour créer une clé de chiffrement n'est pas assez sécurisé - maintenant l'algorithme PBKDF2 est utilisé pour que (pour en savoir plus à propos de PBKDF2 http://en.wikipedia.org/wiki/PBKDF2).
Mise en œuvre de l'algorithme PBKDF2 est copié à partir de https://defuse.ca/php-pbkdf2.htm.
Importante mise à jour de sécurité n ° 2
Grâce à @Scott qui fait attention que le message chiffré doit être authentifié - maintenant HMAC est utilisé pour vérifier que le message n'a pas été modifié.
strlen($str)
->mb_strlen($str, '8bit')
; idem avec lessubstr()
appels. Voirmbstring.func_overload
pour plus d'info. Sinon, excellente amélioration. 🙂Je ne suis pas un crypto gars, mais je utiliser ce genre de choses:
Pour décrypter une chaîne que vous avez besoin de la clé et le vecteur d'initialisation (
$iv
).Ici est une mise à jour et sécurisé à Eugène Fidelin le code original.
Veuillez notez la sortie a la IV et du Sel, que vous avez également besoin de stocker en toute sécurité avec la clé de déchiffrement.
Ici est une bonne bibliothèque PHP qui peut vous aider à chiffrer et déchiffrer les chaînes disponibles via le Compositeur et facile à utiliser:
https://github.com/CoreProc/crypto-guard
Voici un exemple: