Hash kata sandi Postgres sangat mirip dengan yang Anda lakukan, hanya perlu memasukkan nama pengguna sebagai berikut:
pghash = "md5" + hashlib.md5(password + username).hexdigest()
AFAIK, dokumen postgres tidak benar-benar mendokumentasikan format hash ini sama sekali, dan tampaknya menganggap admin jarang menangani hash ini secara langsung :( Tidak ada metode bawaan untuk menghasilkan hash ini yang saya ketahui. Jika kata sandi diberikan ke ALTER USER
perintah tidak sesuai dengan format hash postgres, itu mengasumsikan kata sandi belum di-hash, dan menanganinya secara internal - sesuai dokumen untuk kata kunci CREATE ROLE's ENCRYPTED. (IMHO ini adalah perilaku yang cacat, karena jika hash bergantung pada nama pengguna, itu berarti hash tidak dapat disalin dan ditempelkan di antara akun yang berbeda, rusak ketika akun diganti namanya, dan (menebak entropi bijaksana) hanya memiliki ~ 6 bit garam efektif).
Peringatan di bagian atas dokumentasi passlib untuk hash mungkin bisa lebih jelas. Itu dimaksudkan untuk memperingatkan orang-orang yang menelusuri dokumentasi passlib bahwa 1) hash ini sangat tidak aman, 2) bahwa mereka tidak boleh mengadopsinya untuk digunakan dalam aplikasi mereka sendiri, dan 3) bahwa itu hanya cocok untuk tujuan bekerja dengan akun pengguna postgres, karena ini adalah format hash terkuat (dan satu-satunya) yang didukung postgres untuk akunnya sendiri.
(Jika Anda mencoba menggunakan postgres untuk meng-hash kata sandi untuk akun pengguna aplikasi Anda sendiri, saya sangat mendukung rekomendasi Clodoaldo untuk menggunakan bcrypt melalui ekstensi pgcrypto).