Hash hesla Postgresu je velmi blízký tomu, co jste udělali, jen potřebuje, aby bylo uživatelské jméno zahrnuto následovně:
pghash = "md5" + hashlib.md5(password + username).hexdigest()
AFAIK, postgresové dokumenty tento formát hash ve skutečnosti vůbec nedokumentují a zdá se, že předpokládají, že administrátoři se těmito hashemi budou jen zřídka zabývat:Neexistují žádné vestavěné metody pro generování těchto hashů, o kterých vím. Pokud heslo poskytnuté ALTER USER
příkaz neodpovídá postgresovému formátu hash, předpokládá, že heslo nebylo hašováno, a stará se o to interně - podle dokumentů pro klíčové slovo CREATE ROLE ENCRYPTED. (IMHO je to chybné chování, protože pokud hash závisí na uživatelském jménu, znamená to, že hash nelze kopírovat a vkládat mezi různé účty, přerušují se při přejmenování účtu a (z hlediska odhadu entropie) má pouze ~6 bitů účinná sůl).
Varování v horní části dokumentace passlib pro hash by pravděpodobně mohlo být jasnější. Mělo to varovat lidi, kteří procházejí dokumentaci passlib, že 1) tento hash je strašně nejistý, 2) že by ho neměli převzít pro použití ve svých vlastních aplikacích a 3) že je vhodný pouze pro účely práce s uživatelské účty postgres, protože je to nejsilnější (a jediný) formát hash, který postgres podporuje pro své vlastní účty.
(Pokud se pokoušíte použít postgres k hašování hesel pro uživatelské účty vaší vlastní aplikace, důrazně bych podpořil Clodoaldovo doporučení používat bcrypt prostřednictvím rozšíření pgcrypto).