8795 sujets

Développement web côté serveur, CMS

Bonsoir !

Je dois, pour des raisons de sécurité, chiffrer +/- 10 000 enregistrements existants dans deux champs (injectés préalablement via csv).
J'ai beaucoup de mal à me décider sur le mode opératoire le plus efficace et optimisé.

Selon vous, faut-il mieux passer par une boucle PHP (php récupère les données, les chiffre et les renvoie à MySQL) ou une commande SQL existe-t-elle déjà ? Y a-t-il d'autres solutions ?

Merci
Erwan
Chiffrer en "direct" sur MySQL serait effectivement un bonne solution, le problème est que le premier champ doit être encodé en sha-256 et le second avec un algorithme perso. (AES-256 adapté et modifié). Là, ça risque de coincer…
Modifié par r-one (14 Jan 2009 - 19:20)
En suivant cette logique, il faudrait arriver à "passer" le champ dans la fonction... Évidemment dans l'exemple suivant, ça ne peut pas marcher, "champ" n'étant pas une variable PHP… Sais-tu comment faire ?


mysql_query("UPDATE table SET champ=".chiffrer(champ)."") or die…
r-one a écrit :
le problème est que le premier champ doit être encodé en sha-256 et le second avec un algorithme perso
Ben tu aurais pu commencer par là... Smiley murf

Du coup je ne vois pas d'autre solution que la boucle PHP. Smiley hmm
En effet, autant pour moi… Smiley smile

Y a-t-il donc moyen "d'échapper" d'une manière ou d'une autre du SQL dans la fonction PHP ?
Faute de mieux, je vais donc passer par la boucle (c'est lourd m'enfin...)

$sql_champs = mysql_query("SELECT champ FROM table");

for($i = 0; $champs[$i] = mysql_fetch_assoc($sql_champs); $i++);
array_pop($champs);

foreach ($champs as $champ) {
	$champ = $champ["champ"];
	$champ_hash = hash('sha256', $champ);
	mysql_query("UPDATE table SET champ='$champ_hash' WHERE id='$champ'");
}


Des suggestions d'optimisation ?
A ma connaissance, mysql ne propose pas la possibilité de créer ses propres fonctions (d'autres le font : MS, oracle, etc.). Du coup ça va être difficile de faire beaucoup mieux.
Par contre je ne pige pas trop ton code...

J'aurais fait :
<?php
function monhashperso($champ) {
	// hashage perso
	return $champ;
}

$sql = 'SELECT id, champ1, champ2 from matable';
$result = mysql_query($sql);
while($row = mysql_fetch_row($result)) {
	$champ1 = hash('sha256', $row[1]);
	$champ2 = monhashperso($row[2]);
	mysql_query("UPDATE matable SET champ1='$champ1', champ2='$champ2' WHERE id='$row[0]'");
}
?>