Пожалуйста, помогите мне интерпретировать функцию - PullRequest
0 голосов
/ 13 октября 2011

Мне было поручено задокументировать приложение, в котором нет комментариев. Однако мне не удалось понять следующую функцию.

private uint GetVersionHash(int encver, int realver)
{
    int EncryptedVersionNumber = encver;
    int VersionNumber = realver;
    int VersionHash = 0;
    int DecryptedVersionNumber = 0;
    string VersionNumberStr;
    int a = 0, b = 0, c = 0, d = 0, l = 0;

    VersionNumberStr = VersionNumber.ToString();

    l = VersionNumberStr.Length;

    // I am specifically struggling with the purpose and intent of this loop.

    for (int i = 0; i < l; i++)
    {
        VersionHash = (32 * VersionHash) + (int)VersionNumberStr[i] + ;
    }

    a = (VersionHash >> 24) & 0xFF;
    b = (VersionHash >> 16) & 0xFF;
    c = (VersionHash >> 8) & 0xFF;
    d = VersionHash & 0xFF;
    DecryptedVersionNumber = (0xff ^ a ^ b ^ c ^ d);

    if (EncryptedVersionNumber == DecryptedVersionNumber)
    {
        return Convert.ToUInt32(VersionHash);
    }
    else
    {
        return 0;
    }
}

С моим текущим пониманием это сдвиг 5 вправо и добавляет некоторую ценность.

Также дополнительная информация:

  • encver представляется зашифрованной версией как int (читается из файла)
  • realver - это версия, которую мы тестируем на совпадение. Эта функция передается в другую функцию с short.MinValue до short.MaxValue

Какова цель этого цикла? Как код достигает этой цели?

Ответы [ 3 ]

2 голосов
/ 13 октября 2011

Мне кажется, что цикл for является просто частью пользовательской хеш-функции - той же самой функции, которая использовалась для генерации метода param int encver, поскольку суть метода заключается в проверке соответствия хеша в encver перефразирование realver - предположительно для какой-то проверки целостности.

2 голосов
/ 13 октября 2011

Цикл вычисляет «хэш» символов (цифр) в строке, представляющей реальный номер версии. Значением VersionHash является число, которое зависит от каждого символа в строке, длины строки и их порядка.

0 голосов
/ 13 октября 2011

Я бы не стал слишком беспокоиться о логике этой процедуры.Это типичная домашняя система шифрования, возвращающая «хэш» номера версии.Я бы включил подпрограмму в комментарий, в котором указана функция, не вдаваясь в подробности.

Цикл for генерирует хэш, получая значение (int) символа в строке, а затем выполняя эквивалентныйсдвиг его влево на 4 байта.Таким образом, предполагая, что (int) значения номера версии:

1, 2, 3

цикл for сгенерирует VersionHash:

000200030004

...