Change password after being validated
It would be more intuitive if your validate_all method was just called validate.

In quite a few places you are doing something like this in validate_length:

def validate_length(self):  # Check the length, gotta be over 8
    if len(self.password) &gt; 8:
        return True
    else:
        return False


Just return the right value right away:

def validate_length(self):  # Check the length, gotta be over 8
    return len(self.password) &gt; 8


It would also make more sense if the Validator.validate method just returned True or False instead of setting a class variable and returning a string detailing the status:

def validate(self, password):
    return all(validator(password) for validator in [self.validate_length, self.validate_upper_case, ...])


I would also make failing a testcase raise an exception and catch it in validate:

class ValidatorError(Exception):
    pass
...

class PasswordValidator(object):
    def __init__(self):
        self.validators = [self.validate_length, self.validate_upper_case, ...]

    ...

    def validate_length(self, password):  
        """Check the length, gotta be over 8"""
        if len(password) &gt; 8:
            return True
        raise ValidatorError("Failed length validation. Allowed length: (&gt; 8)")

    def validate(self, password):
        try:
            return all(validator(password) for validator in self.validators)
        except ValidatorError as e:
            print e
            return False

...
if __name__ == '__main__':
    pass_verify = obtain_password()
    val = PasswordValidator()
    if not val.validate(pass_verify):
        print "Password not validated."
    else:
        print second_authentication(pass_verify)


Also your encrypt function seems to be one-way. There is no way to validate an entered password in the future (to see whether the entered password is equal to the password set by this program).