6 votes

PHP: Id court comme Youtube, avec du sel

J'ai besoin d'encoder/chiffrer des identifiants de base de données et de les ajouter à mes URL. La sécurité n'est pas un problème que je cherche à résoudre, mais je cherche quelque chose avec une sécurité modérée. Le but principal est d'avoir des identifiants courts, uniques et sûrs pour les URL.

L'extrait suivant semble faire ce dont j'ai besoin (à partir de http://programanddesign.com/php/base62-encode/)

function encode($val, $base=62,  $chars='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') {
    // ne peut pas gérer les nombres plus grands que 2^31-1 = 2147483647
    $str = '';
    do {
        $i = $val % $base;
        $str = $chars[$i] . $str;
        $val = ($val - $i) / $base;
    } while($val > 0);
    return $str;
}

function decode($str, $base=62, $chars='0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ') {
    $len = strlen($str);
    $val = 0;
    $arr = array_flip(str_split($chars));
    for($i = 0; $i < $len; ++$i) {
        $val += $arr[$str[$i]] * pow($base, $len-$i-1);
    }
    return $val;
}

echo encode(2147483647); // affiche 2lkCB1

Je vais probablement modifier un peu les fonctions :

  1. Supprimer le paramètre $base ; cela peut être déterminé par la longueur de ($chars)
  2. Éliminer dans l'ensemble de caractères les lettres/chiffres qui pourraient être confondus entre eux (par exemple, 0, O, o)

Comment pourrais-je modifier le script pour utiliser un sel avec ? Et serait-ce une bonne idée ? Est-ce que j'augmenterais involontairement les chances de collision, etc. ?

10voto

Halil Özgür Points 5486

Si vous voulez rendre l'identifiant numérique impossible à deviner à partir de la chaîne, vous pouvez utiliser un sel. Vous devriez pouvoir récupérer l'identifiant sans collisions. L'article Créer des identifiants courts avec PHP - Comme Youtube ou TinyURL de Kevin van Zonneveld est un bon point de départ. En tout cas, vérifiez l'unicité.

2voto

Martin Bean Points 9945

Pourquoi ne pas simplement utiliser la fonction uniqid de PHP pour générer une chaîne faux-aléatoire à partir de l'horodatage actuel? Ensuite, enregistrez cette chaîne alphanumérique dans l'enregistrement vidéo au moment du téléchargement.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X