CRC32, вероятно, подходит для ваших нужд. Это обсуждалось в этом вопросе .
С точки зрения усечения примитива хеша, единственное широко используемое применение этого - псевдослучайная функция SSL / TLS (PRF) , которая используется для генерации ключей. Он использует HMAC, начальные числа и метки, чтобы генерировать столько байтов, сколько вам нужно, хешируя несколько раз, а затем обрезая до нужного количества байтов.
Что касается вашего конкретного вопроса, вы можете прочитать выходные данные хэша в Int32 и затем записать их вместе, если вы параноик:
static void Main()
{
int xorCrc = GetHashedCrc(new SHA1Cng(), new byte[] {0xDE, 0xAD, 0xBE, 0xEF});
}
private static int GetHashedCrc(HashAlgorithm algorithm, byte[] bytesToHash)
{
byte[] hash = algorithm.ComputeHash(bytesToHash);
int totalInt32s = hash.Length/sizeof(int);
int result = 0;
for(int i = 0; i < totalInt32s; i++)
{
int currentInt = BitConverter.ToInt32(hash, sizeof(int)*i);
result = result ^ currentInt;
}
return result;
}