web:php:random
Différences
Ci-dessous, les différences entre deux révisions de la page.
| web:php:random [le 26/02/2013 à 16:40] – créée Yosko | web:php:random [le 27/02/2013 à 12:37] (Version actuelle) – Yosko | ||
|---|---|---|---|
| Ligne 1: | Ligne 1: | ||
| - | ====== | + | ====== |
| **Note : article en cours de rédation** | **Note : article en cours de rédation** | ||
| Ligne 7: | Ligne 7: | ||
| ===== Crypto ===== | ===== Crypto ===== | ||
| L' | L' | ||
| + | |||
| + | ==== Méthode générale (linux) ==== | ||
| Sous Linux/Unix, une solution consiste à aller lire le fichier / | Sous Linux/Unix, une solution consiste à aller lire le fichier / | ||
| Ligne 50: | Ligne 52: | ||
| En résumé, où **N** est un multiple de 3 : | En résumé, où **N** est un multiple de 3 : | ||
| * si le nombre d' | * si le nombre d' | ||
| - | * Si il est **N+1**, il y aura un caractère un peu moins aléatoire suivi de 2 '' | + | * Si il est **N+1**, il y aura 1 caractère un peu moins aléatoire suivi de 2 '' |
| - | * Si il est **N+2**, il y aura un caractère un peu moins aléatoire suivi de 1 '' | + | * Si il est **N+2**, il y aura 1 caractère un peu moins aléatoire suivi de 1 '' |
| + | Pour calculer le nombre de caractère qu'on va obtenir, ou le nombre de caractère utiles (pour ne garder que l' | ||
| + | <code php> | ||
| + | function base64CharForByteString($length = 1, $usefulCharOnly = false;) { | ||
| + | if($usefulCharOnly === true) { | ||
| + | //number of really random characters returned by base64() for $nbBytes bytes | ||
| + | return (int)($length*8/ | ||
| + | } else { | ||
| + | //number of characters returned by base64() for $nbBytes bytes | ||
| + | return ((int)(($length+2)/ | ||
| + | } | ||
| + | } | ||
| + | </ | ||
| - | Seulement sous Linux/Unix (/ | + | A l'inverse si on sait le nombre de caractères |
| <code php> | <code php> | ||
| - | //31 binary characters from urandom will result in a 42 long base64 encoded string | + | function bytesNeededForBase64String($length) { |
| - | $nbBytes = 31; | + | |
| - | //read random bytes from / | + | } |
| - | $random = file_get_contents('/ | + | </code> |
| + | Après, il ne reste plus qu'à tronquer notre chaine pour garder la partie " | ||
| - | //turn binary string to readable string | + | ==== random ou urandom ? ==== |
| - | //(base64 is [a-zA-Z0-9] with also '+' | + | Sur certains systèmes, on peut utiliser au choix le fichier '' |
| - | $base64 = base64_encode($random); | + | |
| - | $base64 | + | En réalité, si les deux font presque la même chose, urandom utilise une entropie plus faible : |
| + | * inconvéniant : un peu moins sécurisé d'un point de vue cryptographique, | ||
| + | * avantage : est capable de générer une plus grande quantité d' | ||
| + | |||
| + | En bref : pour utiliser dans des sels de hashage, il vaut mieux se tourner vers '' | ||
| + | |||
| + | ==== Et Windows ? ==== | ||
| + | Il n'existe pas d'équivalent direct à ''/ | ||
| + | |||
| + | La librairie en question tente de trouver la manière la plus sécurisée disponible sur votre système. Dans l' | ||
| + | * openssl_random_pseudo_bytes | ||
| + | * mcrypt_create_iv | ||
| + | * / | ||
| + | * Méthode custom si aucune autre n'est disponible (celui qui sera probablement utilisé sur Windows). | ||
| + | |||
| + | Je conserve sous le coude une copie de ce travail (placé sous licence BSD), au cas où. Pour la télécharger, | ||
| - | // | ||
| - | //scripts that dislike the ' | ||
| - | $base64 = str_replace(' | ||
| - | </ | ||
web/php/random.1361896804.txt.gz · Dernière modification : le 26/02/2013 à 16:40 de Yosko
