De wachtwoord-hash van Postgres komt heel dicht in de buurt van wat u deed, het hoeft alleen maar de gebruikersnaam als volgt op te nemen:
pghash = "md5" + hashlib.md5(password + username).hexdigest()
AFAIK, de postgres-documenten documenteren dit hash-formaat helemaal niet, en lijken aan te nemen dat beheerders deze hashes zelden rechtstreeks zullen behandelen :( Er zijn geen ingebouwde methoden voor het genereren van deze hashes die ik ken. Als het wachtwoord dat aan de ALTER USER
commando niet in overeenstemming is met het postgres hash-formaat, het gaat ervan uit dat het wachtwoord niet gehasht is, en zorgt daar intern voor - volgens de documenten voor CREATE ROLE's ENCRYPTED sleutelwoord. (IMHO dit is een gebrekkig gedrag, want als een hash afhangt van de gebruikersnaam, betekent dit dat hashes niet kunnen worden gekopieerd en geplakt tussen verschillende accounts, breken wanneer het account wordt hernoemd, en (naar entropie wijs) heeft slechts ~ 6 bits van effectief zout).
De waarschuwing bovenaan de passlib-documentatie voor de hash zou waarschijnlijk duidelijker kunnen zijn. Het was bedoeld om mensen te waarschuwen die door de passlib-documentatie bladerden dat 1) deze hash vreselijk onveilig was, 2) dat ze het niet zouden moeten gebruiken voor gebruik in hun eigen applicaties, en 3) dat het alleen geschikt was om ermee te werken postgres-gebruikersaccounts, aangezien dit de sterkste (en enige) hash-indeling is die postgres voor zijn eigen accounts ondersteunt.
(Als je postgres probeert te gebruiken om wachtwoorden te hashen voor de gebruikersaccounts van je eigen applicatie, zou ik Clodoaldo's aanbeveling sterk onderschrijven om bcrypt te gebruiken via de pgcrypto-extensie).