I understand that the addition of a salt provides some protection, because the attacker can no longer just look up the hash value in a rainbow table. However, it is still feasible to write a cracking program that looks up the hash, and then applies the salt to it, since the salt itself is necessarily unencrypted. Thus a salted password is still crackable, though cracking it will take longer. My question is how much longer will it take? Does the salt increase the time-complexity of cracking by a significant order of magnitude? What are the respective time-complexities of cracking an unsalted hash and cracking a salted hash using the same lookup table?
Another, somewhat related, question: I read in Practical Unix and Internet Security that the Modular Crypt function used in some Unix systems does not XOR the salt with the hash, and just tacks it onto the beginning. Doesn't this defeat the purpose of having a salt, since the unsalted hash can be trivially extracted from the password string and attacked as if the salt were not there in the first place?