我被赋予了记录没有评论的应用程序的任务。但是,我无法理解以下功能。
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.MinValue
到short.MaxValue
这个循环的目的是什么?代码如何实现这一目的?
答案 0 :(得分:2)
循环计算表示实际版本号的字符串中的字符(数字)的“散列”。 VersionHash的值是一个数字,它取决于字符串中的每个字符,字符串的长度及其顺序。
答案 1 :(得分:2)
对我看来,for循环只是自定义散列函数的一部分 - 与用于生成方法param int encver的函数相同,因为该方法的本质是测试加密器中的散列是否匹配a现实的重演 - 大概是为了某种完整性检查。
答案 2 :(得分:0)
我不会太担心这个例程中的逻辑。这是典型的本地加密系统,用于返回版本号的“哈希”。我会在一个注释中表明这个例程,这个注释表明了这个功能而没有太多细节。
for循环通过获取字符串中字符的(int)值然后相当于将其向左移动4个字节来生成散列。因此,假设版本号的(int)值为:
1,2,3
for循环将生成VersionHash:
000200030004