OAuth nécessite un numéro aléatoire de 64 bits et non signé codé sous forme d'une chaîne ASCII en format décimal. Pouvez-vous m'aider à y parvenir avec PHP? Merci p>
3 Réponses :
Vous pouvez utiliser deux nombres 32 bits, quatre nombres 16 bits, etc. p>
php a rand () et et Donc, votre Quant à travailler avec des entiers de 64 bits, je vous recommande d'utiliser le GMP bibliothèque car il a une bonne gamme de fonctions pour vous aider. P>
Vous pouvez créer un numéro, appelez 64 GMP_Setbit () A > S sur celui-ci avec des positions successives, convertissez-la en une chaîne à l'aide de GMP_Strval (). p> Safest Strike> Le pari le plus simple générerait 64 bits aléatoires et les définir un par un. P>
Vous construisez-vous vous-même un adaptateur OAuth? Si oui, vous voudrez peut-être reconsidérer. Il y a beaucoup de bonnes bibliothèques OAuth, y compris One de pecl , un en poire , un autre de la framework zend et cet autre organisé sur Google Code . J'ai travaillé avec les trois premiers, et ils sont tous assez décents.
Si vous vraiment em> veux faire cela vous-même, vous pouvez faire face à un problème. PHP ne peut pas penser en nombre de 64 bits à moins que cela ne soit compilé sur une plate-forme 64 bits ou une extension de mathématiques avancée installée. Cela va faire la présentation d'un nombre de 64 bits comme une décimale très em> difficile. Il ressemble à de nombreuses bibliothèques que j'ai liées ci-dessus ignorent complètement l'exigence de format em> et utilisez simplement avec un hachage de MD5 cru. Voici le code de l'adaptateur ZF: p> /**
* Generate nonce
*
* @return string
*/
public function generateNonce()
{
return md5(uniqid(rand(), true));
}
C'était un problème vraiment intéressant (comment créer la représentation décimale d'un nombre aléatoire arbitraire de longueur en PHP, sans prolongation optionnelle). Voici la solution:
à ce stade, appelant math est difficile, voici le code: P> aléatoire_bits (2048) code> vous donnera 2048 Bits aléatoires en tant que chaîne codée hexagonale, pas de problème. p>
Étape 2: conversion de base de précision arbitraire h2>
echo base_convert_arbitrary(random_bits(64), 16, 10);
+1 pour l'esprit-soufflant de même pensant i> de le faire dans PHP. N'oubliez pas que comte_bits code> ne sera pas en mesure de traiter des chiffres plus grands que php_int_max.
@Chals: Merci pour le vote. Count_bits code> est en effet limité, mais comme nous ne serons que pour mesurer pour mesurer la valeur de retour de
mt_getrandmax code> C'est adéquate pour le travail.
Très adéquat compte que mt_getrandmax code> semble généralement être 2 ^ 31-1 même sur des plates-formes 64 bits.
Juste FYI: Parfois, la resprésentation du nombre peut contenir des zéros de premier plan (c'est-à-dire le résultat de la fonction hachage ()) et cette fonction ne peut évidemment pas les restaurer après la conversion. Donc, si nab = convert (n, a, b) code> il peut s'agir de ce
n! == convert (nab, b, a) code>. Fais attention.
Fonction intéressante base_convert_arbitraire code>. Mais pourquoi tous les alphabets? N'a-t-elle pas
valeur $ = Valeur $ * $ fratesbase + $ Nibbles [$ I]; code> S'assurer que l'opération ne peut être valide que pour la base 2 à 16?
Intéressant, je viens de remarquer ce qu'est-ce que Nibbles a réellement est Stros code> pas
substr code>. Je suis toujours confus cependant à
($ valeur> = $ tobase) {$ Nibbles [$ newlen ++] = (int) ($ valeur / $ tobase $); $ valeur% = $ tobase; } code>, qu'est-ce qui se passe exactement ici? Les commentaires seraient bien appréciés.