### 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
DEFAULT_CHARS = sorted([u'ascii_letters', u'digits', u".,:-_"])
DEFAULT_CANDIDATE_CHARS = u'.,:-_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789'
old_style_params_data = (
    
    dict(
        term=u'/path/to/file',
        
        params=dict(length=DEFAULT_LENGTH, encrypt=None, ident=None, chars=DEFAULT_CHARS, seed=None),
        candidate_chars=DEFAULT_CANDIDATE_CHARS,
    ),
    
    dict(
        term=u'/path/with/embedded spaces and/file',
        dded spaces and/file',
        params=dict(length=DEFAULT_LENGTH, encrypt=None, ident=None, chars=DEFAULT_CHARS, seed=None),
        candidate_chars=DEFAULT_CANDIDATE_CHARS,
    ),
    dict(
        term=u'/path/with/equals/cn=com.ansible',
        filename=u'/path/with/equals/cn=com.ansible',
        params=dict(length=DEFAULT_LENGTH, encrypt=None, ident=None, chars=DEFAULT_CHARS, seed=None),
        candidate_chars=DEFAULT_CANDIDATE_CHARS,
    ),
    dict(
        term=u'/path/with/unicode/くらとみ/file',
        filename=u'/path/with/unicode/くらとみ/file',
        params=dict(length=DEFAULT_LENGTH, encrypt=None, ident=None, chars=DEFAULT_CHARS, seed=None),
        candidate_chars=DEFAULT_CANDIDATE_CHARS,
    ),
    # Mix several special chars