Готовая функция зашифровки пароля
static byte ORD(char ch)
{
return (byte)ch;
}
static string func(string str)
{
char[] strch = str.ToCharArray();
int i = 0;
long[] key = new long[]{0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0};
long[] dst = new long[]{0,0,0,0,
0,0,0,0,
0,0,0,0,
0,0,0,0};
long result;
long one, two, three, four;
string encrypt = "0x";
int nBytes = str.Length;
while (i < nBytes)
{
i++;
key[i - 1] = ORD(strch[i - 1]);
dst[i - 1] = key[i - 1];
}
result = key[0] + key[1] * 256 + key[2] * 65536 + key[3] * 16777216;
one = result * 213119 + 2529077;
one = one - (one / 4294967296) * 4294967296;
result = key[4] + key[5] * 256 + key[6] * 65536 + key[7] * 16777216;
two = result * 213249 + 2529089;
two = two - (two / 4294967296) * 4294967296;
result = key[8] + key[9] * 256 + key[10] * 65536 + key[11] * 16777216;
three = result * 213203 + 2529589;
three = three - (three / 4294967296) * 4294967296;
result = key[12] + key[13] * 256 + key[14] * 65536 + key[15] * 16777216;
four = result * 213821 + 2529997;
four = four - (four / 4294967296) * 4294967296;
key[3] = (one / 16777216);
key[2] = ((one - key[3] * 16777216) / 65535);
key[1] = ((one - key[3] * 16777216 - key[2] * 65536) / 256);
key[0] = ((one - key[3] * 16777216 - key[2] * 65536 - key[1] * 256));
key[7] = (two / 16777216);
key[6] = ((two - key[7] * 16777216) / 65535);
key[5] = ((two - key[7] * 16777216 - key[6] * 65536) / 256);
key[4] = ((two - key[7] * 16777216 - key[6] * 65536 - key[5] * 256));
key[11] = (three / 16777216);
key[10] = ((three - key[11] * 16777216) / 65535);
key[9] = ((three - key[11] * 16777216 - key[10] * 65536) / 256);
key[8] = ((three - key[11] * 16777216 - key[10] * 65536 - key[9] * 256));
key[15] = (four / 16777216);
key[14] = ((four - key[15] * 16777216) / 65535);
key[13] = ((four - key[15] * 16777216 - key[14] * 65536) / 256);
key[12] = ((four - key[15] * 16777216 - key[14] * 65536 - key[13] * 256));
dst[0] = dst[0] ^ key[0];
i = 1;
while (i < 16)
{
i++;
dst[i - 1] = dst[i - 1] ^ dst[i - 2] ^ key[i - 1];
}
i = 0;
while (i < 16)
{
i++;
if (dst[i - 1] == 0)
{
dst[i - 1] = 102;
}
}
i = 0;
while (i < 16)
{
i++;
if (dst[i - 1] < 16)
{
encrypt = encrypt + "0" + Convert.ToString(dst[i - 1], 16);
}
else
{
encrypt = encrypt + Convert.ToString(dst[i - 1], 16);
}
}
return encrypt;
}
static void Main(string[] args)
{
string s1 = "root";//проверял на руте=)
Console.WriteLine(func(s1));
}
Что-то много лишнего =)
Ну, во первых кто вас так учил массивы объявлять? Конечно, так объявлять можно никто не спорит, но разве long[] dst = new long[16]; не красивее будет?
Во вторых тут достаточно 2 циклов (3, если слегка модифицировать код), кто муже целесообразнее будет использовать for вместо While
В третьих, зачем вам функция ORD? Вам не кажется что она лишняя?
Ну и еще пара мелочей не столь существенных
Ну и на последок постарайтесь запомнить, что вы чаще читаете код чем его пишите так что старайтесь его делать более удобным к чтению.

