Hello,
Je cherche un système simple pour envoyer des données à un formulaire et les récupérer lors de la submission du formulaire sans que l'utilisateur n'aie pu les modifier (ou du moins pas sans que je le calcule)
Pour le moment, voilà comment je fais :
J'ai un salt inconnu de l'utilisateur,
je sérialise les données à transmettre, et je calcule un hash de cette sérialisation associée au salt.
quand je récupère les données, je sépare mon hash des données et je vérifie que le hash des données et du salt correspond bien aux données.
Le tout est encodé en base64 pour être transmis sans corruption des données.
Mon problème est que base64 n'est pas un cryptage, bien sur l'utilisateur ne connait pas le salt mais je me demande s'il n'y a pas moyen pour lui de me retransmettre facilement des données modifiées. (edit: en fait ça me semble basique mais suffisant)
voici une implémentation, (non testée), si ce n'est pas assez sûr je prends tout ce que vous avez de simple (ruby, scala, python ou autre acceptés)
merci.
edit: je cherche également quelque chose de plus élégant, les substr() ne me plaisent pas
Le second problème est que, comme je l'ai dit, base64 n'est pas un cryptage, n'importe qui peut décoder la chaine, virer les 32 premiers caractères et voir ce que j'ai transmis.
Avez vous une solution pour que l'utilisateur ne puisse pas lire ce que je fais passer dans le formulaire ? je préfère cette solution à un envoi d'id correspondant aux infos stockées côté serveur.
Je cherche un système simple pour envoyer des données à un formulaire et les récupérer lors de la submission du formulaire sans que l'utilisateur n'aie pu les modifier (ou du moins pas sans que je le calcule)
Pour le moment, voilà comment je fais :
J'ai un salt inconnu de l'utilisateur,
je sérialise les données à transmettre, et je calcule un hash de cette sérialisation associée au salt.
quand je récupère les données, je sépare mon hash des données et je vérifie que le hash des données et du salt correspond bien aux données.
Le tout est encodé en base64 pour être transmis sans corruption des données.
Mon problème est que base64 n'est pas un cryptage, bien sur l'utilisateur ne connait pas le salt mais je me demande s'il n'y a pas moyen pour lui de me retransmettre facilement des données modifiées. (edit: en fait ça me semble basique mais suffisant)
voici une implémentation, (non testée), si ce n'est pas assez sûr je prends tout ce que vous avez de simple (ruby, scala, python ou autre acceptés)
merci.
<?php
define('secret', 'hsdrnkjngunqsdg');
function encode($data) {
$serialized = serialize($data);
return base64_encode(md5($serialized.secret).$serialized);
}
function decode($data) {
$d = base64_decode($data);
$md5 = substr($d,0,32);
$serialized = substr($d, 32);
if ($md5 == md5($serialized.secret))
return unserialize($serialized);
else
throw new Exception('échec !');
}
edit: je cherche également quelque chose de plus élégant, les substr() ne me plaisent pas
Le second problème est que, comme je l'ai dit, base64 n'est pas un cryptage, n'importe qui peut décoder la chaine, virer les 32 premiers caractères et voir ce que j'ai transmis.
Avez vous une solution pour que l'utilisateur ne puisse pas lire ce que je fais passer dans le formulaire ? je préfère cette solution à un envoi d'id correspondant aux infos stockées côté serveur.