There are two stages in a pseudo-random numbers generation process. In the first stage, a generator obtains some variable which changes with time, say, system time, a mouse cursor position, etc. In the second stage, a generator performs a digital function and a hash function. As a result, a byte chain is created (on the basis of original variables).. If the same variables are used twice, we will get the same two hash function results. However, if at least one bit in the input variables is different, we get two completely different results.
However, such variables as system time or a mouse cursor position can be easily calculated or guessed. Such data cannot be considered random without further processing.. That is why the second stage is necessary.
Not every hash algorithm is suitable for cryptography. Nowadays, there are several popular hash algorithms. Some of them are described below.