The salt is stored with a hash because a different salt is used for each hash, unlike your previous approach with sha512, where you used one salt for each hash.
Using this method, one rainbow table will be useful for only one password, whereas if the same salt was used for each hash, one rainbow table would be good for all hashes.
The work factor (as you call it: "rounds") must also be preserved so that the hash can be correctly verified. Yes, you could rule it out, but in fact there was no harm.
bcrypt was developed as an intensive algorithm. It is very expensive to compute a single hash and it is not possible to create lookup tables for hashes with high working factors.
The work rate is designed to be changed as technology advances, so it will always be difficult to crack bcrypt hashing. But you can only update the hash when checking the password.
You can get a system in which different hashes have different workload values, depending on which ones have been updated and which are not.
source share