A PRNG (pseudorandom number generator) is an algorithm that outputs numbers in a complex, seemingly unpredictable pattern. Truly random numbers (say, from a radioactive source) are utterly unpredictable, whereas all algorithms are predictable, and a PRNG returns the same numbers when passed the same starting parameters or seed.
PRNGs can be used for a variety of applications, such as games.
A cryptographically secure PRNG is a PRNG with certain extra properties making it suitable for use in cryptography. These include:
Most PRNGs are not cryptographically secure.
Math.random() and CSS's random() built-in PRNG functions. Note that these are not a cryptographically secure PRNG.Crypto.getRandomValues(): this is intended to provide cryptographically secure numbers.