我发现自己处于绝望的境地,试图理解下面的算法。有人认出它吗?有没有人认识到这种密码算法?
它来自反编译程序集。我写一个PHP网站前端应用程序,需要使用生成的密码通过这种可怕的一段代码作为凭证登录。
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; }
}
}
有一个“Decrpyt”的方法以类似的方式工作。密码长16个字。
您可以在您的数据库的用户记录中添加一个标志,在您迁移到PHP网站后需要他们重置密码吗?或者添加一个Password2文件,该文件是新网站将使用的新计算(Blowfish)哈希值(将该标志作为备份),但会在当前网站迭代中生成? –
@JarredFarrish其实我不行。它只是一个PHP前端,这些应用程序并排运行。我认为我可以解密所有的密码,并为每个用户记录生成并保存第二个哈希值,但我无法修改原始应用程序,并且每天都必须重新生成密码,以便在有人更改其密码时覆盖该情况。 – David
但是,无论如何感谢这个想法! – David