Skrót hasła Postgres jest bardzo zbliżony do tego, co zrobiłeś, wystarczy podać nazwę użytkownika w następujący sposób:
pghash = "md5" + hashlib.md5(password + username).hexdigest()
AFAIK, dokumentacja postgres w ogóle nie dokumentuje tego formatu skrótu i wydaje się, że administratorzy rzadko mają do czynienia z tymi skrótami bezpośrednio :( Nie ma wbudowanych metod generowania tych skrótów, które znam. Jeśli hasło dostarczone do ALTER USER
polecenie nie jest zgodne z formatem skrótu postgres, zakłada, że hasło nie zostało zaszyfrowane i zajmuje się tym wewnętrznie - zgodnie z dokumentacją dla słowa kluczowego ENCRYPTED CREATE ROLE. (IMHO jest to wadliwe zachowanie, ponieważ jeśli hash zależy od nazwy użytkownika, oznacza to, że hash nie można kopiować i wklejać między różnymi kontami, przerywać, gdy nazwa konta jest zmieniana, i (zgadując entropię) ma tylko ~ 6 bitów skuteczna sól).
Ostrzeżenie na górze dokumentacji passlib dotyczące skrótu może być prawdopodobnie jaśniejsze. Miało to na celu ostrzeżenie osób przeglądających dokumentację passlib, że 1) ten skrót jest strasznie niepewny, 2) że nie powinni go adoptować do użytku we własnych aplikacjach, oraz 3) że nadaje się tylko do pracy z konta użytkowników postgres, ponieważ jest to najsilniejszy (i jedyny) format skrótu, który postgres obsługuje na własnych kontach.
(Jeśli próbujesz używać postgres do haszowania haseł do kont użytkowników własnej aplikacji, zdecydowanie popieram zalecenie Clodoaldo, aby używać bcrypt za pomocą rozszerzenia pgcrypto).