请帮我解释一下功能

时间:2011-10-13 08:10:41

标签: c# c#-4.0 documentation

我被赋予了记录没有评论的应用程序的任务。但是,我无法理解以下功能。

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;
    }
}

根据我目前的理解,它将bithift 5改为正确并增加了一些价值。

还有一些进一步的信息:

  • encver似乎是一个加密版本作为int(从文件中读取)
  • realver似乎是我们正在测试匹配的版本。它从short.MinValueshort.MaxValue
  • 的另一个函数循环到此函数

这个循环的目的是什么?代码如何实现这一目的?

3 个答案:

答案 0 :(得分:2)

循环计算表示实际版本号的字符串中的字符(数字)的“散列”。 VersionHash的值是一个数字,它取决于字符串中的每个字符,字符串的长度及其顺序。

答案 1 :(得分:2)

对我看来,for循环只是自定义散列函数的一部分 - 与用于生成方法param int encver的函数相同,因为该方法的本质是测试加密器中的散列是否匹配a现实的重演 - 大概是为了某种完整性检查。

答案 2 :(得分:0)

我不会太担心这个例程中的逻辑。这是典型的本地加密系统,用于返回版本号的“哈希”。我会在一个注释中表明这个例程,这个注释表明了这个功能而没有太多细节。

for循环通过获取字符串中字符的(int)值然后相当于将其向左移动4个字节来生成散列。因此,假设版本号的(int)值为:

1,2,3

for循环将生成VersionHash:

000200030004