What I need is a reversible function that transforms a long (64-bit integer) into another long number, in a way that seems "random" for a user (but actually is deterministic), so that 3 subsequent numbers are transformed into 3 numbers completely different to each other.
It is easy to do it without being reversible, but it turns out pretty difficult when it comes to this part.
Basically it's the same question as Reversible hash function?, but I need more than 2^32 distinct values.
Any ideas?
PS: I'm going to write it in Java, but the question itself is pretty generic.