prima che la tua domanda possa essere risolta, devi specificare perché vuoi l'integrità dei dati in primo luogo: la protezione contro le modifiche accidentali è una cosa molto diversa rispetto alla protezione contro la modifica dell'avversario. È inoltre necessario specificare in quale contesto si verifica la convalida: in che modo l'attore che convalida sa quale dovrebbe essere il checksum corretto.
I would like to use some fields such as file size, and creation date in hashing. Is that possible or safe way for hashing?
In generale, no: questo non ti dà molte informazioni significative.
Questi elementi sono chiamati metadati: sono dati sui dati ed è, beh, un diverso insieme di dati su di essi. Quando lo leggi, ti fidi implicitamente del supporto di memorizzazione (file system) per fornirti informazioni accurate. Questa è una supposizione che è semplicemente sbagliata anche se stai solo cercando di proteggere da modifiche accidentali (non falsificazione).
In casi molto limitati, potrebbe essere utile: ad esempio, se si ha un file di registro creato su un server sicuro, è possibile utilizzare la dimensione del file / l'ultima data di scrittura per sapere quando il file è cambiato e quindi sapere se devi ri-analizzare. Ma questo implica che l'informazione sia corretta, aggiornata e che tu abbia uno stato precedente con cui confrontarlo.
In modo più generale
Come ha suggerito Steffen, l'hashing può essere molto veloce: è necessario leggere il file una sola volta e, a meno che non si lavori con risorse molto limitate (sistemi embedded, ecc.) il ritardo introdotto dal processo di hashing stesso dovrebbe essere minimale e molto più piccolo dell'operazione IO stessa nella maggior parte dei casi (a meno che tu non stia operando rigorosamente dalla memoria). Come sempre, il diavolo si trova nei dettagli: non hai fornito alcuna informazione su ciò che avevi intenzione di fare, quindi non c'è modo di fornire una risposta più utile.