Hi.

I am trying to find a good hashing function for Arduino and have found a couple. I would like to ask if they will work 100% with what I am doing. By that I mean that if they will generate a unique hash for the input I give it.

So here is the input:

```
unsigned int inputData[16]={
0b0000001000000000,
0b0000010000000000,
0b0000000100000000,
0b0000000010000000,
0b0000000001000000,
0b0000000000100000,
0b0000000000010000,
0b0000000000001000,
0b0000000000000100,
0b0100000000000000,
0b0010000000000000,
0b1110000000000000,
0b0000000000000010,
0b0000000000000001,
0b0100000000000000,
0b0010000000000000};
```

Then I convert it to a char array by first adding each integer into a string object and then using that to construct the char array. If there is a better way then please let me know:

```
String s;
for(int i = 0; i < 16; i++)
{
s += String(inputData[i]);
}
char buf[s.length()+1];
s.toCharArray(buf,s.length()+1);
```

Then buf array will hold these values:

```
5121024256128643216841638481925734421163848192
```

This conversion needs to be done because the algorithms that I have found require a char array.

The first one is an MD5 hash algorithm: MD5 hash algorithm for Arduino

This one will generate unique enough hash for my purpose but the hash it generates is a bit memory intensive since it returns 32 chars.

The second one is Jenkins hash function Jenkins one at a time hash function.

```
uint32_t jenkins_one_at_a_time_hash(char *key, size_t len)
{
uint32_t hash, i;
for(hash = i = 0; i < len; ++i)
{
hash += key[i];
hash += (hash << 10);
hash ^= (hash >> 6);
}
hash += (hash << 3);
hash ^= (hash >> 11);
hash += (hash << 15);
return hash;
}
```

This one returns an integer which is great for my purpose but I am not sure about the uniqueness of it.

So I have a few questions:

Does someone know how to make some tests to check for the uniqueness of the Jenkins function or to calculate how unique it is?

Does someone know an alternative hashing function that will provide me with uniqueness and a relatively space restricted output?

Is it possible to generate a shorter output from MD5?

Cheers!