### Summary

The first execution of ```lookup('ansible.builtin.password', 'password.txt encrypt=bcrypt')``` creates the text file.

The second execution fail with ```An unhandled exception occurred while running the lookup plugin 'ansible.builtin.password'. Error was a <class 'ValueError'>, original message: invalid characters in bcrypt salt. invalid characters in bcrypt salt```.

### Issue Type

Bug Report

### Component Name

ansible.builtin.password

### Ansible Version

```console
$ ansible --version
ansible [core 2.14.3]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/eagle/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.10/site-packages/ansible
  ansible collection location = /home/eagle/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.10.10 (main, Mar  5 2023, 22:26:53) [GCC 12.2.1 20230201] (/usr/bin/python)
  jinja version = 3.1.2
  libyaml = True
```


### Configuration

```console
$ ansible-config dump --only-changed -t all
CONFIG_FILE() = /etc/ansible/ansible.cfg
```


### OS / Environment

Arch Linux

### Steps to Reproduce

Run the following command 2 times:
```shell
ansible -m debug -a "msg={{lookup('ansible.builtin.password', 'password.txt encrypt=bcrypt') }}" localhost
```
Example output:
```shell
$ ansible -m debug -a "msg={{lookup('ansible.builtin.password', 'password.txt encrypt=bcrypt') }}" localhost
[WARNING]: No inventory was parsed, only implicit localhost is available
localhost | SUCCESS => {
    "msg": "$2b$12$UYPgwPMJVaBFMU9ext22n.LxxvQFDFNYvLWshdEC7jRkSPTu1.VyK"
}

$ cat password.txt
z2fH1h5k.J1Oy6phsP73 salt=UYPgwPMJVaBFMU9ext22n/ ident=2b

$ ansible -m debug -a "msg={{lookup('ansible.builtin.password', 'password.txt encrypt=bcrypt') }}" localhost
[WARNING]: No inventory was parsed, only implicit localhost is available
localhost | FAILED! => {
    "msg": "An unhandled exception occurred while running the lookup plugin 'ansible.builtin.password'. Error was a <class 'ValueError'>, original message: invalid characters in bcrypt salt. invalid characters in bcrypt salt"
}

$ cat password.txt
z2fH1h5k.J1Oy6phsP73 salt=UYPgwPMJVaBFMU9ext22n/ ident=2b ident=2b
```

### Expected Results

The second run should works.

### Actual Results

```console
$ ansible -m debug -a "msg={{lookup('ansible.builtin.password', 'password.txt encrypt=bcrypt') }}" localhost -vvvv
ansible [core 2.14.3]
  config file = /etc/ansible/ansible.cfg
  configured module search path = ['/home/eagle/.ansible/plugins/modules', '/usr/share/ansible/plugins/modules']
  ansible python module location = /usr/lib/python3.10/site-packages/ansible
  ansible collection location = /home/eagle/.ansible/collections:/usr/share/ansible/collections
  executable location = /usr/bin/ansible
  python version = 3.10.10 (main, Mar  5 2023, 22:26:53) [GCC 12.2.1 20230201] (/usr/bin/python)
  jinja version = 3.1.2
  libyaml = True
Using /etc/ansible/ansible.cfg as config file
setting up inventory plugins
host_list declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
script declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
auto declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
yaml declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
ini declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
Skipping due to inventory source not existing or not being readable by the current user
toml declined parsing /etc/ansible/hosts as it did not pass its verify_file() method
[WARNING]: No inventory was parsed, only implicit localhost is available
Loading callback plugin minimal of type stdout, v2.0 from /usr/lib/python3.10/site-packages/ansible/plugins/callback/minimal.py
Skipping callback 'default', as we already have a stdout callback.
Skipping callback 'minimal', as we already have a stdout callback.
Skipping callback 'oneline', as we already have a stdout callback.
exception during Jinja2 execution: Traceback (most recent call last):
  File "/usr/lib/python3.10/site-packages/ansible/template/__init__.py", line 831, in _lookup
    ran = instance.run(loop_terms, variables=self._available_variables, **kwargs)
  File "/usr/lib/python3.10/site-packages/ansible/plugins/lookup/password.py", line 384, in run
    password = do_encrypt(plaintext_password, encrypt, salt=salt, ident=ident)
  File "/usr/lib/python3.10/site-packages/ansible/utils/encrypt.py", line 272, in do_encrypt
    return passlib_or_crypt(result, encrypt, salt_size=salt_size, salt=salt, ident=ident)
  File "/usr/lib/python3.10/site-packages/ansible/utils/encrypt.py", line 265, in passlib_or_crypt
    return PasslibHash(algorithm).hash(secret, salt=salt, salt_size=salt_size, rounds=rounds, ident=ident)
  File "/usr/lib/python3.10/site-packages/ansible/utils/encrypt.py", line 191, in hash
    return self._hash(secret, salt=salt, salt_size=salt_size, rounds=rounds, ident=ident)
  File "/usr/lib/python3.10/site-packages/ansible/utils/encrypt.py", line 244, in _hash
    result = self.crypt_algo.using(**settings).hash(secret)
  File "/usr/lib/python3.10/site-packages/passlib/utils/handlers.py", line 455, in using
    subcls = super(TruncateMixin, cls).using(**kwds)
  File "/usr/lib/python3.10/site-packages/passlib/utils/handlers.py", line 1137, in using
    subcls = super(HasManyIdents, cls).using(**kwds)
  File "/usr/lib/python3.10/site-packages/passlib/utils/handlers.py", line 1653, in using
    subcls = super(HasRounds, cls).using(**kwds)
  File "/usr/lib/python3.10/site-packages/passlib/utils/handlers.py", line 1350, in using
    salt = subcls._norm_salt(salt, relaxed=relaxed)
  File "/usr/lib/python3.10/site-packages/passlib/handlers/bcrypt.py", line 237, in _norm_salt
    salt = super(_BcryptCommon, cls)._norm_salt(salt, **kwds)
  File "/usr/lib/python3.10/site-packages/passlib/utils/handlers.py", line 1459, in _norm_salt
    raise ValueError("invalid characters in %s salt" % cls.name)
ValueError: invalid characters in bcrypt salt
localhost | FAILED! => {
    "msg": "An unhandled exception occurred while running the lookup plugin 'ansible.builtin.password'. Error was a <class 'ValueError'>, original message: invalid characters in bcrypt salt. invalid characters in bcrypt salt"
}
```


### Code of Conduct

- [X] I agree to follow the Ansible Code of Conduct
- "when using a comma separated string, to enter comma use two commas ',,' somewhere - preferably at the end.
             Quotes and double quotes are not supported."
        type: list
        elements: str
        default: ['ascii_letters', 'digits', ".,:-_"]
      length:
        description: The length of the generated password.
        default: 20
        type: integer
      seed:
        version_added: "2.12"
        description:
          - A seed to initialize the random number generator.
          - Identical seeds will yield identical passwords.
          - Use this for random-but-idempotent password generation.
        type: str
    notes:
      - A great alternative to the password lookup plugin,
        if you don't need to generate random passwords on a per-host basis,
        would be to use Vault in playbooks.
        Read the documentation there and consider using it first,
        it will be more desirable for most applications.
      - If the file already exists, no data will be written to it.
        If the file has contents, those contents will be read in as the password.
        Empty files cause the password to return as an empty string.
      - 'As all lookups, this runs on the Ansible host as the user running the playbook, and "become" does not apply,
        the target file must be readable by the playbook user, or, if it does not exist,
        the playbook user must have sufficient privileges to create it.
        (So, for example, attempts to write into areas such as /etc will fail unless the entire playbook is being run as root).'
"""