Optimisation code php

Fermé
Utilisateur anonyme - 31 juil. 2017 à 15:23
 Utilisateur anonyme - 4 août 2017 à 14:32
Bonjour, j'aimerais savoir si il existe un moyen d'optimisé ce code :
<?php
$timestamp_debut = microtime(true);
 
require 'groups/functions.php';
$bdd = connexion_bdd();
$text = 'exemple@email.com'; 

$reqmail = $bdd->query('SELECT mail FROM espace_membre_membres');
$i = 0;
while($mail = $reqmail->fetch()){
	if($text == decrypter($mail['mail'])){
		$i++;
	}
}

echo $i.'<br />';
 
$timestamp_fin = microtime(true);
$difference_ms = $timestamp_fin - $timestamp_debut;
echo 'Exécution du script : ' . $difference_ms . ' secondes.';
?>

Merci d'avance
Nils0

2 réponses

jordane45 Messages postés 36578 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 27 novembre 2022 4 400
31 juil. 2017 à 15:50
Bonjour,

Tout dépend ce que contient ta fonction decrypter

0
Utilisateur anonyme
31 juil. 2017 à 15:56
Merci de ta réponse, voici les fonctions :
function crypter($chaine){
    if($chaine != null){
        $key = 'lacle';
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
        $iv = mcrypt_create_iv($iv_size, MCRYPT_RAND);
        $ciphertext = mcrypt_encrypt(MCRYPT_RIJNDAEL_128, $key,
        $chaine, MCRYPT_MODE_CBC, $iv);
        $ciphertext = $iv . $ciphertext;
        $ciphertext_base64 = base64_encode($ciphertext);
        return $ciphertext_base64; 
    }
}

function decrypter($chaine_crypter){
    if($chaine_crypter != null){
        $key = 'lacle';
        $iv_size = mcrypt_get_iv_size(MCRYPT_RIJNDAEL_128, MCRYPT_MODE_CBC);
        $ciphertext_dec = base64_decode($chaine_crypter);
        $iv_dec = substr($ciphertext_dec, 0, $iv_size);
        $ciphertext_dec = substr($ciphertext_dec, $iv_size);
        $plaintext_dec = mcrypt_decrypt(MCRYPT_RIJNDAEL_128, $key,
        $ciphertext_dec, MCRYPT_MODE_CBC, $iv_dec);
        return trim($plaintext_dec);
    }
}
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 007
Modifié le 31 juil. 2017 à 16:32
Bonjour,

Tu peux probablement l'optimiser en cryptant le mail $text, et le mettant dans la clause WHERE du SQL, avec un COUNT(1) :
<?php
$timestamp_debut = microtime(true);
 
require 'groups/functions.php';
$bdd = connexion_bdd();
$text = crypter('exemple@email.com'); 

$reqmail = $bdd->query("SELECT COUNT(1) as nb FROM espace_membre_membres WHERE mail='$text'");

$res = $reqmail->fetch();
echo $res['nb'] . '<br />';
 
$timestamp_fin = microtime(true);
$difference_ms = $timestamp_fin - $timestamp_debut;
echo 'Exécution du script : ' . $difference_ms . ' secondes.';
?>

Pourquoi ça optimise ? Tu ne fais qu'une seule opération cryptographique au lieu de N.
Pourquoi j'ai dit « probablement » ? Parce que je ne sais pas combien coûte la fonction crypter par rapport à la fonction decrypter. Si la première coûte 10 fois la seconde, et que tu n'as que 5 lignes en base, alors mon code n'optimise rien.
Par contre, pour un grand nombre de lignes en base, c'est clairement plus efficace.

Xavier
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 007
31 juil. 2017 à 16:32
(Juste au passage, si $text vient en réalité d'une donnée saisie par un utilisateur, utilise une requête préparée pour éviter les injections SQL)
0
Utilisateur anonyme > Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021
Modifié le 31 juil. 2017 à 17:49
oui t'inquiète pas je sais ;)
0
Utilisateur anonyme
31 juil. 2017 à 17:50
par contre ça ne marche pas car le systeme de cryptage retourne une chaine aléatoire...
0
Reivax962 Messages postés 3671 Date d'inscription jeudi 16 juin 2005 Statut Membre Dernière intervention 11 février 2021 1 007
31 juil. 2017 à 17:53
Si tu chiffres deux fois la même chaîne tu n'as pas deux fois le même résultat ?
Mais tu peux les déchiffrer quand même ? C'est louche ton truc ^^'
0
Utilisateur anonyme
31 juil. 2017 à 17:58
oui, si je chiffre deux fois la meme chaine, je n'aurais pas le même résultat, le déchiffrage marche avec la clé ... https://www.php.net/manual/fr/function.mcrypt-encrypt.php
0