PHP force brute générateur de mot de passe
Je veux être en mesure d'entrer un numéro et un mot de passe, construite à partir d'une chaîne de caractères ou des caractères uniques. Donc, si j'ai deux caractères dans la chaîne : $string = "AB"; ce sont les résultats souhaités :
-in- | -out-
0 | A
1 | B
2 | AA
3 | AB
4 | BA
5 | BB
6 | AAA
7 | AAB
8 | ABA
9 | ABB
10 | BBB
Et ainsi de suite. Voici mon code actuel :
for($i = 1; $i < 100; $i++)
{
echo createString ($i, "AB")."<br/>";
}
function createString ($id, $chars) //THE ISSUE <---
{
$length = getLength($id, $chars);
//echo "LENGTH : ".$length."<br/><br/>";
$string = "";
for($i = 0; $i < $length; $i++)
{
$a = round(($id - 1)/pow($length, $i)); //THE ISSUE <-----
$local = local($a, strlen($chars));
$string = $chars{$local - 1}." : ".$string;
}
return $string;
}
function local ($num, $max)
{
$num += $max;
while($num > $max)
{
$num -= $max;
}
return $num;
}
/*
get the length of the output by inputing the "in" and defining the possible characters
*/
function getLength ($id, $chars)
{
$charNUM = 1;
$LR = -1;
$HR = 0;
while(true)
{
$LR = $HR;
$HR = pow(strlen($chars), $charNUM) + $LR;
$LR += 1;
//echo $LR." : ".$HR." : ".$charNUM."<br/>";
if($id >= $LR && $id <= $HR)
{
return $charNUM;
}
if($id < $LR)
{
return false;
}
$charNUM ++;
}
}
Que les sorties :
B :
A :
A : B :
B : A :
B : B :
A : A :
A : B : B :
A : B : A :
A : A : B :
A : A : A :
A : A : B :
A : B : A :
A : B : B :
A : B : A :
B : A : B : B :
B : A : B : A :
B : A : B : B :
B : A : B : A :
B : A : A : B :
B : A : A : A :
B : A : A : B :
B : A : A : A :
B : A : B : B :
B : A : B : A :
B : B : B : B :
B : B : B : A :
B : B : A : B :
B : B : A : A :
B : B : A : B :
B : B : A : A :
B : B : A : B : B :
B : B : A : B : A :
B : B : A : B : B :
B : B : A : A : A :
B : B : A : A : B :
B : B : A : A : A :
B : B : A : A : B :
B : B : A : A : A :
B : B : B : B : B :
B : B : B : B : A :
B : B : B : B : B :
Et ainsi de suite. Mais il a des répétitions. Je vais avoir des problèmes avec la fonction createString(). Je veux accéder à un mot de passe quelque part en bas de la force brutale mot de passe de la table sans l'avoir pré-calculé. Je ne veux pas d'une pré-calculés tableau et d'accéder simplement à un point.
pas de répéter comme ça, mais il retourne la même pense, par exemple: AAA et AAA, AAA = AAA
Puis-je droit: Vous voulez rendre un certain Nombre dans un système où vous définissez vos chiffres par l'intermédiaire d'une chaîne. Donc la base de votre système serait la longueur de la chaîne et de la i-ième digit le char à la i-ème position dans la chaîne?
c'est l'idée. dans le code où j'ai la balise //<- la QUESTION est de savoir où est compilé.
Vous devriez poster votre solution comme une réponse et de l'accepter.
Votre solution me donne(ideone.com/Fh4tR):
Puis-je droit: Vous voulez rendre un certain Nombre dans un système où vous définissez vos chiffres par l'intermédiaire d'une chaîne. Donc la base de votre système serait la longueur de la chaîne et de la i-ième digit le char à la i-ème position dans la chaîne?
c'est l'idée. dans le code où j'ai la balise //<- la QUESTION est de savoir où est compilé.
Vous devriez poster votre solution comme une réponse et de l'accepter.
Votre solution me donne(ideone.com/Fh4tR):
A, B, BA, BB, AA, AB, ABA, ABB, AAA, BAB, BBA, BBB ...
de sorte qu'il semble ne pas s'adapter à votre sortie désirée.
OriginalL'auteur Patrick Lorio | 2011-08-11
Vous devez vous connecter pour publier un commentaire.
Je vais poster ici le code de traduire n'importe quel nombre entier positif à un système tout entier positif donné de base (>1) le retour de la valeur de chaque chiffre.
De sorte que vous appelez utiliser cette fonction comme suit:
De l'essayer. Il est mis en forme un peu différente de celle de votre sortie, mais doit être lisible.
Certains expamle de sortie pour la base "AB":
OriginalL'auteur Nobody
Bon vieux récursivité
oha, il y a longtemps ^^ tout d'Abord, il pourrait être causé par vos paramètres: Peut-être la limite de la mémoire est simplement (inutile) de petite taille. L'algorithme peut créer une énorme quantité de chaînes de caractères dans la mémoire, donc le plus causé le problème d'origine: Il est juste beaucoup de trucs voulu. Vous pouvez utiliser une base de données pour pousser actuellement indésirables les chaînes de loin pour utilisation ultérieure.
OriginalL'auteur KingCrunch
Solution:
Exemple:
De sortie:
Exemple 2:
Sortie 2:
De crédit pour
id_encode()
va à @PatrickLorio.id_decode()
a été construit par moi-même avec le calcul à la main:Je pense qu'après, il est possible d'optimiser
id_encode()
en prenant la n-ième racine de la carte d'identité... peut-être que je trouve le temps de vérifier.OriginalL'auteur mgutt