Προς το περιεχόμενο

Windows Programming: File hashing


nikolakisgr

Προτεινόμενες αναρτήσεις

Δημοσ.

Καλησπέρα,

 

Προσπαθώ να γράψω έναν auto updater σε C για μια εφαρμογή windows που θα λειτουργεί ως εξής:

 

θα υπάρχει σε κάποιον web server η τελευταία version της εφαμοργής, για παράδειγμα εάν η εφαρμογή αποτελείτε από 2 αρχεία main.exe και lib.dll στον web server θα υπάρχουν οι τελευταίες version μαζί με ένα text αρχείο που θα περιέχει το checksum (md5/sha1 file hash) των αρχείων. Πχ.

 

url: http://www.myapplicationupdater.gr/checksum.txt

------------------------------------------------------

 

main.exe 9e107d9d372bb6826bd81d3542a419d6

lib.dll 8e107d9d372bb6826ad81db542a419d9

 

Ένα παρόμοιο αρχείο θα υπάρχει και τοπικά στον client με τα checksum των αρχείων της working version. Όταν τρέχει ο updater στον client θα ελένχει εάν τα τοπικά file hashes είναι τα ίδια με αυτά στον web server. Εάν δεν είναι θα ξανακατεβάζει τα αρχεία που έχουν διαφορετικό hash.

 

Οι ερωτήσεις μου είναι οι εξής:

 

- Υπάρχουν έτοιμες function στο windows api που να παίρουν σαν είσοδο ένα file name (ή HANDLE) και να επιστρέφουν το hash του αρχείου ? (Έψαξα στο msdn αλλά βρήκα libraries μόνο για .NET)

 

- Προτείνετε να χρησιμοποιήσω τις συναρτήσεις WinHTTP για communication και file transfer από τον web server ή κατευθείαν WinSock ? (Εκτός εάν υπάρχει και κάποιο άλλο έτοιμο library)

 

Οποιεσδήποτε άλλες συμβουλές είναι ευπρόσδεκτες.

 

Ευχαριστώ για τον χρόνο σας.

Δημοσ.

- Υπάρχουν έτοιμες function στο windows api που να παίρουν σαν είσοδο ένα file name (ή HANDLE) και να επιστρέφουν το hash του αρχείου ? (Έψαξα στο msdn αλλά βρήκα libraries μόνο για .NET)

Υπάρχουν οι ρουτίνες Κρυπτογράφησης (Cryptography API) όπως η CryptCreateHash ή η CryptHashData κτλ. αλλά η χρήση τους είναι λίγο πιο απαιτητική από ένα απλό file HANDLE -> Hash.

 

- Προτείνετε να χρησιμοποιήσω τις συναρτήσεις WinHTTP για communication και file transfer από τον web server ή κατευθείαν WinSock ? (Εκτός εάν υπάρχει και κάποιο άλλο έτοιμο library)

Όχι, προτείνω να ασχοληθείς με τις ρουτίνες WinINet (InternetOpen, InternetReadFile κτλ.) καλύτερα.

Δημοσ.

Καλησπερα

Πολυ σωστα ο φιλος Directx μιλησε για το Wininet.

απλα κανε αποθηκευση ενα εγραφο κειμενου με την εκδοση της εφαρμογης σε ενα Server απο εκει και περα η εφαρμογη ελεγχει κατα καποια χρονικα διαστηματα που εχει ορισει ο κατασκευαστης της η ο καθε χρηστης της για νεα εκδοση .ο ελεγχος γινεται με το wininet και

αν βρεθει στο server νεα εκδοση τοτε την κατεβαζει .

καλο απογευμα

Αρχειοθετημένο

Αυτό το θέμα έχει αρχειοθετηθεί και είναι κλειστό για περαιτέρω απαντήσεις.

  • Δημιουργία νέου...