private static string CalculateAdler32Hash(string inputString)
{
const uint BASE = 65521;
var buffer = Encoding.UTF8.GetBytes(inputString);
uint checksum = 1;
var offset = 0;
var count = buffer.Length;
var s1 = checksum & 0xFFFF;
var s2 = checksum >> 16;
while (count > 0)
{
var n = 3800;
if (n > count)
{
n = count;
}
count -= n;
while (--n >= 0)
{
s1 = s1 + (uint) (buffer[offset++] & 0xff);
s2 = s2 + s1;
}
s1 %= BASE;
s2 %= BASE;
}
checksum = (s2 << 16) | s1;
return checksum.ToString();
}
}