Je me suis retrouvé dans une situation désespérée en essayant de comprendre l'algorithme ci-dessous. Est-ce que quelqu'un le reconnaît?Est-ce que quelqu'un reconnaît cet algorithme de chiffrement?
Il provient d'un assemblage décompilé. Je suis en train d'écrire une application frontal site PHP et besoin d'utiliser des mots de passe générés par ce terrible morceau de code que les informations d'identification pour vous connecter.
public static void Crypt(string ThisCle, string Buffer, long BufferLength)
{
int index = 1;
do
{
WUC.cry[index] = char.MinValue;
checked { ++index; }
}
while (index <= 32000);
WUC.cle = Conversions.ToCharArrayRankOne(ThisCle);
WUC.si = 0;
WUC.x1a2 = 0;
WUC.i = 0;
WUC.j = 0;
WUC.l = 0;
while ((long) WUC.j <= checked (BufferLength - 1L))
{
byte num1 = checked ((byte) Strings.Asc(Strings.Mid(Buffer, WUC.j + 1, 1)));
WUC.Assemble();
WUC.cfc = WUC.inter >> 8;
WUC.cfd = WUC.inter & (int) byte.MaxValue;
WUC.compte = 0;
do
{
WUC.cle[WUC.compte] = Strings.Chr(Strings.Asc(WUC.cle[WUC.compte])^(int) num1);
checked { ++WUC.compte; }
}
while (WUC.compte <= 15);
byte num2 = checked ((byte) ((int) num1^(WUC.cfc^WUC.cfd)));
byte num3 = (byte) ((uint) num2 >> 4);
byte num4 = checked ((byte) ((int) num2 & 15));
char ch;
switch (num3)
{
case (byte) 0:
ch = 'a';
break;
case (byte) 1:
ch = 'b';
break;
case (byte) 2:
ch = 'c';
break;
case (byte) 3:
ch = 'd';
break;
case (byte) 4:
ch = 'e';
break;
case (byte) 5:
ch = 'f';
break;
case (byte) 6:
ch = 'g';
break;
case (byte) 7:
ch = 'h';
break;
case (byte) 8:
ch = 'i';
break;
case (byte) 9:
ch = 'j';
break;
case (byte) 10:
ch = 'k';
break;
case (byte) 11:
ch = 'l';
break;
case (byte) 12:
ch = 'm';
break;
case (byte) 13:
ch = 'n';
break;
case (byte) 14:
ch = 'o';
break;
case (byte) 15:
ch = 'p';
break;
}
WUC.cry[checked (WUC.j * 2)] = ch;
switch (num4)
{
case (byte) 0:
ch = 'a';
break;
case (byte) 1:
ch = 'b';
break;
case (byte) 2:
ch = 'c';
break;
case (byte) 3:
ch = 'd';
break;
case (byte) 4:
ch = 'e';
break;
case (byte) 5:
ch = 'f';
break;
case (byte) 6:
ch = 'g';
break;
case (byte) 7:
ch = 'h';
break;
case (byte) 8:
ch = 'i';
break;
case (byte) 9:
ch = 'j';
break;
case (byte) 10:
ch = 'k';
break;
case (byte) 11:
ch = 'l';
break;
case (byte) 12:
ch = 'm';
break;
case (byte) 13:
ch = 'n';
break;
case (byte) 14:
ch = 'o';
break;
case (byte) 15:
ch = 'p';
break;
}
WUC.cry[checked (WUC.j * 2 + 1)] = ch;
checked { ++WUC.j; }
}
}
Il y a une méthode « Decrpyt » travaillant d'une manière similaire. Les chiffres sont de 16 caractères.
Pourriez-vous ajouter un indicateur dans leur enregistrement utilisateur dans votre base de données qui leur a demandé de réinitialiser leur mot de passe une fois que vous migrez vers le site PHP? Ou ajoutez un fichier Password2 qui était le hash nouvellement calculé (Blowfish) que votre nouveau site utilisera (avec le drapeau en tant que sauvegarde), mais qui est généré sur l'itération actuelle du site? –
@JarredFarrish En fait, je ne peux pas. C'est seulement une interface PHP, les applications fonctionnent côte à côte. Je pensais pouvoir décrypter tous les mots de passe et générer et enregistrer un deuxième hachage pour chaque enregistrement d'utilisateur, mais je ne peux pas modifier l'application d'origine et je devrais régénérer les mots de passe tous les jours pour changer de mot de passe. – David
Mais merci pour l'idée quand même! – David