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