Today I had a hard time explaining the difference to a friend.

I know seeds are used when generating "random" strings. And salts are used when providing different outcomes to a hash.

What is a better way of describing these concepts and their possible differences.

Seed: 

Encryption is powered by random numbers, but how do you generate a truly random number? The current millisecond? The number of processor threads in use? You need a starting point. This is called a seed: it kicks off a random number.

Salt:

When you hash a string, it will always end up with the same hash. 

foo = acbd18db4cc2f85cedef654fccc4a4d8 every time. 

This is a problem when you want to store things that you want to keep truly hidden (like passwords). If you see acbd18db4cc2f85cedef654fccc4a4d8 you always know that it is foo. So, you simply add a "salt" to the original string to make sure that it is unique.

foo + asdf = e967c9fead712d976ed6fb3d3544ee6a

foo + zxcv = a6fa8477827b2d1a4c4824e66703daa9

So 'salt' makes a 'hash' better by obscuring the original text. 
