Я хочу попробовать шифрование MD5 в Java.На самом деле у меня есть код .net, который делает шифрование md5.Код был написан много лет назад.Мне нужно преобразовать этот код в Java, который производит точно такой же вывод.Прежде всего, мне нужно понять, есть ли здесь какая-то логика или она просто перемешивает вещи, чтобы получить уникальный результат.Я хочу понять, что на самом деле делает здесь, и тогда, возможно, я смогу найти лучшее простое решение.Можете ли вы проанализировать код, что на самом деле делает здесь?
class Program
{
static void Main(string[] args)
{
Console.Write("Enter text to encrypt:");
string md5String = Console.ReadLine();
string encryptedString = method2(method1(md5String));
Console.WriteLine(encryptedString);
Console.ReadLine();
}
public static string method2(string text)
{
MD5CryptoServiceProvider mD5CryptoServiceProvider = new MD5CryptoServiceProvider();
byte[] array = mD5CryptoServiceProvider.ComputeHash(Encoding.GetEncoding(1254).GetBytes(text));
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < array.Length; i++)
{
stringBuilder.Append(array[i].ToString("x2").ToUpper());
}
return stringBuilder.ToString();
}
public static string method1(string x)
{
int num = 20;
try
{
string text = string.Concat(new string[]
{
's'.ToString(),
'e'.ToString(),
'3'.ToString(),
'x'.ToString(),
'4'.ToString()
});
string text2 = x.ToUpper();
text = text + '2'.ToString() + 'g'.ToString() + 'p'.ToString();
string text3 = text.ToUpper();
int num2 = 1;
byte[] bytes = Encoding.GetEncoding(1254).GetBytes(text2);
byte[] array = bytes;
int num3;
for (int i = 0; i < array.Length; i++)
{
byte b = array[i];
num3 = (int)b;
if (num3 < 65 | num3 > 90)
{
num3 = 65 + num3 % 24;
text2 = text2.Substring(0, num2 - 1) + ((char)num3).ToString() + text2.Substring(num2);
}
num2++;
}
num2 = 1;
bytes = Encoding.GetEncoding(1254).GetBytes(text3);
byte[] array2 = bytes;
for (int j = 0; j < array2.Length; j++)
{
byte b2 = array2[j];
num3 = (int)b2;
if (num3 < 65 | num3 > 90)
{
num3 = 65 + num3 % 24;
text3 = text3.Substring(0, num2 - 1) + ((char)num3).ToString() + text3.Substring(num2);
}
num2++;
}
int num4 = (int)Encoding.GetEncoding(1254).GetBytes(text2)[0];
int num5 = (int)Encoding.GetEncoding(1254).GetBytes(text3)[text3.Length - 1];
num3 = (int)Encoding.GetEncoding(1254).GetBytes(text2)[text2.Length - 1];
num3 %= 13;
string text4 = text2 + text3;
int num6 = 1;
int num7 = 1;
while (num7 <= num && text4.Length < num)
{
num3 = num3 + num4 + num7;
if (num3 > 90)
{
num3 %= 24;
num3 += 65;
}
string text5 = ((char)num3).ToString();
if (num6 == 1)
{
text4 += text5;
num6 = 0;
}
else
{
text4 = text5 + text4;
num6 = 1;
}
num7++;
}
num2 = 1;
bytes = Encoding.GetEncoding(1254).GetBytes(text4);
byte[] array3 = bytes;
for (int k = 0; k < array3.Length; k++)
{
byte b3 = array3[k];
num3 = (int)b3;
num3 = num3 + num5 + num2;
if (num3 > 90)
{
num3 %= 24;
num3 += 65;
}
text4 = text4.Substring(0, num2 - 1) + ((char)num3).ToString() + text4.Substring(num2);
if (num2 >= num)
{
break;
}
num2++;
}
return text4;
}
catch (Exception)
{
}
return "";
}
}
/****** EXAMPLE ******/
Enter text to encrypt:123456
8A5278DAF28D3F0AE9519AA7F17FA863
/****** EXAMPLE ******/