Ecco qui un'implementazione di openssl_encrypt:
https://bhoover.com/using-php-openssl_encrypt-openssl_decrypt-encrypt-decrypt-data/
Il vettore di inizializzazione, random, lo conserva insieme allo stesso dato crittografato.
L'esempio è ovviamente applicato al contesto sbagliato: criptazione di una password. Per la password si usano chiaramente algoritmi di one-way hashing , es. Argon2id e con l'apposita e comoda funzione di PHP, "password_hash".
Dove salvare la chiave di criptazione? finchè lo fai nella stessa maccina in cui risiede l'app o il database, puoi arrivare fino a un certo livello di sicurezza.
La password andrebbe salvata, criptata, su un'altro sistema.
Cmq qualsiasi soluzione è sempre meglio che lasciarla in chiaro nel file di configurazione o nel codice sorgente.
Prova quindi a vedere qui:
https://github.com/vlucas/phpdoten