Hàm băm mật khẩu của Postgres rất gần với những gì bạn đã làm, nó chỉ cần bao gồm tên người dùng như sau:
pghash = "md5" + hashlib.md5(password + username).hexdigest()
AFAIK, các tài liệu postgres không thực sự ghi lại định dạng băm này và dường như cho rằng quản trị viên sẽ hiếm khi xử lý trực tiếp các hàm băm này :( Không có phương pháp nội trang nào để tạo các hàm băm này mà tôi biết. Nếu mật khẩu được cung cấp cho ALTER USER
lệnh không tuân theo định dạng băm postgres, nó giả định mật khẩu chưa được băm và xử lý nội bộ đó - theo tài liệu cho từ khóa ENCRYPTED của CREATE ROLE. (IMHO đây là một hành vi thiếu sót, bởi vì nếu một hàm băm phụ thuộc vào tên người dùng, điều đó có nghĩa là các hàm băm không thể được sao chép và dán giữa các tài khoản khác nhau, bị hỏng khi tài khoản được đổi tên và (đoán entropy khôn ngoan) chỉ có ~ 6 bit muối hữu hiệu).
Cảnh báo ở đầu tài liệu của passlib cho hàm băm có thể rõ ràng hơn. Nó nhằm mục đích cảnh báo những người đang duyệt qua tài liệu mật khẩu rằng 1) hàm băm này không an toàn khủng khiếp, 2) rằng họ không nên sử dụng nó để sử dụng trong các ứng dụng của riêng mình và 3) rằng nó chỉ phù hợp với mục đích làm việc tài khoản người dùng postgres, vì đó là định dạng băm mạnh nhất (và duy nhất) mà postgres hỗ trợ cho các tài khoản của chính nó.
(Nếu bạn đang cố gắng sử dụng postgres để băm mật khẩu cho tài khoản người dùng của ứng dụng của riêng bạn, tôi thực sự khuyên Clodoaldo khuyến nghị sử dụng bcrypt thông qua phần mở rộng pgcrypto).