Is there a difference between a pseudorandom generator (PRG) and a pseudorandom function (PRF)? I read a lot about that things, for example it is possible to build a PRG from PRFs. But I think there is a difference between those two terms.
Pseudorandom generators can be used to feed a pseudorandom function family by repeatedly supplying pseudo-random values to the function. The PRF ensures semantic security, which may be used to stretch keys, initialize vectors or salts. At no point should an efficient algorithm be able to distinguish between a PRF and a random oracle. However this does not fully apply to a PRG, which only guarantees a single value to be pseudorandom. Since the pseudo-random values themselves have no correlation with the PRFs output, in theory it is possible to use a set of PRG as an input.