If you are searching for an immutable audit log, the hard part is probably not choosing a hash function. It is deciding what your system must make impossible, what it merely makes detectable, and which party the reader still has to trust.
A normal application database is designed around current state. A row changes when an address, status, or calculation changes. That is useful for operations, but weak evidence: the database shows what the system says now, not what it said at an earlier point.
A published history needs a different model. The original observation must remain visible even when it was wrong. Corrections become new events rather than replacements.
Model events, not mutable facts
A minimal event might contain:
sequence: 1842 kind: "daily_observation" observed_at: "2026-08-31T23:59:59Z" published_at: "2026-09-01T00:04:12Z" payload: { ...…