Comment chiffrer le texte en clair avec AES-256-CBC en PHP en utilisant OpenSSL?
Je suis en train de chiffrer les données sensibles de l'utilisateur des données comme des messages personnels dans mon php powered site web avant d'entrer dans la base de données. J'ai recherché un peu sur internet et j'ai trouvé les quelques points importants à retenir:
- Ne jamais utiliser mcrypt, il est abandonware.
- AES est basé sur l'algorithme de Rijndael et a été ininterrompue jusqu'à maintenant.
- AES a également été recommandé par la NSA et utilisés dans le Gouvernement AMÉRICAIN cryptage des données, mais depuis la NSA est le recommander, il y a une chance qu'ils pourraient se faufiler sur mes données d'utilisateur facilement.
- Blowfish a été ininterrompue, mais lent et de moins en moins populaire.
Alors, j'ai décidé, je vais l'essayer d'abord avec AES-256-cbc. Mais je ne suis toujours pas sûr si je ne devrait pas examiner Blowfish une meilleure option. Donc, les recommandations sont les bienvenues.
Et ma principale préoccupation est la façon de crypter les données en php? Je ne trouve pas un bon manuel à ce sujet dans la documentation de php. Quelle est la bonne façon de les mettre en œuvre?
Toute aide est très appréciée.
OriginalL'auteur DASH | 2016-01-19
Vous devez vous connecter pour publier un commentaire.
AES-256 (OpenSSL mise en Œuvre)
Vous avez de la Chance.
La
openssl
extension a d'assez facile à utiliser des méthodes pour AES-256. Les étapes que vous devez prendre sont essentiellement...$encryption_key = openssl_random_pseudo_bytes(32);
$iv = openssl_random_pseudo_bytes(openssl_cipher_iv_length('aes-256-cbc'));
openssl_encrypt()
openssl_encrypt($data, 'aes-256-cbc', $encryptionKey, $options, $initializationVector)
$options
peut être réglé pour0
pour les options par défaut ou modifierOPENSSL_RAW_DATA | OPENSSL_ZERO_PADDING
$encrypted = $encrypted . ':' . $iv;
explode(':' , $encrypted);
openssl_decrypt()
openssl_decrypt($encryptedData, 'aes-256-cbc', $encryptionKey, $options, $initializationVector)
Permettant d'openssl
openssl_functions()
ne sera pas disponible par défaut, vous pouvez activer cette extension dans votrephp.ini
fichier en décommentant la ligne.;extension=php_openssl.dll
en supprimant le premier;
PHP Violon.
http://phpfiddle.org/lite/code/9epi-j5v2
ajout d'exemples de la
key
etiv
génération. Pas sûr au sujet de hex la conversion j'ai toujours travaillé à partir de ci-dessus. Opps correction d'une faute de trop.Ok, merci pour ça! Il sera sûr pour stocker les données cryptées directement à la base de données et lorsque le récepteur a pour l'afficher, je vais juste leur laisser les clés et iv?
La mise en œuvre est entièrement à vous. À mon avis, il serait mieux pour authentifier l'utilisateur dans le code PHP quand ils demander les données. Peut-être avec un système de connexion par exemple. Alors authentifié connaît peut être le montre les données non chiffrées. Je n'aurai plus jamais de recommander la publication de la clés.
Une autre chose, dois-je laisser les options à 0? Et Oui, je l'ai fait. J'ai un système de connexion à l'aide de bcrypt pour valider les mots de passe. J'ai besoin de savoir si il est sûr de stocker des données sensibles, comme des messages dans ma base de données? Il va ralentir ma performance? Et blowfish être un substitut viable pour cela?
OriginalL'auteur Luke