> It's trivial to build a lookup table like with md5, it just takes longer.
No, that's not true, because each one is initialized with a completely different public salt. You can't generate lookup tables for it, without covering the entire hash space.
Of course there is. As you said, it's an inherent part of the algorithm. But never put it beyond some people to use a trivial salt (or use the same one for all users)
"because each one is initialized with a completely different public salt"
If they follow the proper procedures, yes, building a lookup table is impossible.
You don't set the salt yourself, the library generates it from from a secure RNG.
For someone that's not that into security, it's easy to use and hard to get wrong.
Checking the python libraries they make it really easy to use, but you can provide your own salt if you want (you have to manually call 'gensalt' as well)
So pretty safe if you copy their examples.
It's trivial to build a lookup table like with md5, it just takes longer.
Salting is essential. I don't know why the parent was downvoted (probably because his salt is predictable?) so good salting is needed.
Example: WPA2 uses the SSID as the salt and PBKDF2 to derive the encryption key.