Is there a reason to use multiple hashing algorithms in a single system? I came across an authentication system Here that uses multiple hashing algorithms to hash data in different stages of the authentication.
My question is what's the rationale behind this?
If a hashing algorithm is secure (or has been secure so far, like SHA-256) why use different ones?
For example: When someone/something is registered in the system, its registration token is generated using algorithm H0 and when it is doing some other actions in the system it uses another hashing algorithm like H1.
A protocol might rely on using some string $x$ as an index into a set of uniform random bit strings $H(x)$.  The security of the protocol may rely on the $H(x)$ being uniform random and independent for different $x$.

A complex protocol may rely on having multiple independent uniform random bit strings for any particular string $x$, used for different purposes in the protocol.  If you use the same $H(x)$ for both purposes, the security may evaporate.

Here's an example: A deduplicating encrypted storage scheme like Tahoe-LAFS needs to derive an encryption key for each file it stores, and needs to choose a storage index that depends only on the content.  Using a single hash function for both—$H(x)$ as the encryption key, and $H(x)$ as the storage index—is a fatal mistake: a malicious storage server can now decrypt every file you store on it.  But using two different hash functions prevents this: knowledge of the storage index $H_1(x)$ doesn't help to find the encryption key $H_0(x)$.

In practical terms, we implement $H_0$ and $H_1$ in terms of a single hash function with a specially formatted input for ‘domain separation’: $H_n(x) := H(n \mathbin\| x)$, where $n$ is some prefix-free encoding of an integer as a bit string—say the 32-bit little-endian encoding.