Would the problem go away by doing hash(seed + string) rather than (seed + hash(string)) ? It keeps the determinism when you want it, but destroys the linearity.