Session Id Class Hash Reduction Mapping
using System;
using System.Numerics;
using System.Security.Cryptography;
public class SessionId
{
private readonly SHA512Managed _hash = new SHA512Managed();
private readonly AcDictionary<byte[], byte[]> map = new AcDictionary<byte[], byte[]>(1024, new ArrayComparer());
public byte[] GetUniqueSessionId<T>(T obj, int bitWidth)
{
if (bitWidth < 32 || bitWidth > 256)
throw new ArgumentException($"Bit Width {bitWidth} must be between 32 and 256.");
var bytes = obj.GetBytes();
var hash = _hash.ComputeHash(bytes, 0, bytes.Length);
map.Add(hash, bytes);
var ba = (byte[]) map.FindKeyIndex(hash).GetBytes().Clone();
return ba.SubArray(0, bitWidth >> 3);
}
public int GetUniqueSessionIntId<T>(T obj)
{
var bytes = obj.GetBytes();
var hash = _hash.ComputeHash(bytes, 0, bytes.Length);
map.Add(hash, bytes);
return map.FindKeyIndex(hash);
}
public BigInteger PermutationWithRepetition(BigInteger n, int r)
{
if (r == BigInteger.Zero)
return BigInteger.Zero;
if (n == BigInteger.Zero)
return BigInteger.Zero;
return BigInteger.Pow(n, r) - 1;
}
}