I've been studying digital signatures and hash functions recently, and I was wondering: Do hash functions exist which will never produce collisions?
This is impossible for any generally useful hash: a hash must map all inputs to a fixed-length output, but you normally want to be able to take variable (and fairly long) inputs. The problem is that there are more inputs than outputs: you normally want to be able to hash any string up to a fairly big length, but the hash itself should not be too long, and there are more long strings than short ones.
Yes they are called Perfect hash functions on wiki. If you follow the link at the bottom of the page there are links to articles and source code. Logically they do not have fixed length output.