Het vraagstuk waar ik mee zit is: Hoe vergelijk ik of een bestand gewijzigd is aan de hand van encrypted data op een server? Als metadata knip ik een bestand op in blokken waarvan ik de checksum naar de server stuur. Dus zegmaar dit in pseudocode:
Het probleem ontstaat hier wanneer er data in het bestand wijzigt van ongelijke lengte. De resterende data schuift dan op en daardoor zijn alle checksum ongelijk. Dit betekent dat dat bij een bit meer of minder aan het begin van het bestand alle data opnieuw verstuurd moet worden. Bij grote bestanden gaat dat een probleem worden.
Een idee wat ik heb is gaan zoeken in het bestand naar het punt waarop de checksums weer overeenkomen met de server. Dus dan zou je zoiets in pseudocode krijgen:
Dit is een manier om het op te lossen, alleen past deze het encryptie algoritme aan, zodat een kleine wijziging in het bestand ook een kleine wijziging in de encrypted data betekent. Dat wil ik echter niet, ik wil uitgaan van bestaande standaarden en niet m'n eigen encryptie gaan schrijven.
Heeft iemand hier een beter idee?
code:
1
2
3
4
5
6
| while( fread( buffer, BLOCK_LENGTH, file ) > 0 ) { checksum = get_block_checksum( buffer ); if( !server_has_checksum( checksum ) ) upload_block( encrypt_data( buffer ), checksum ); } |
Het probleem ontstaat hier wanneer er data in het bestand wijzigt van ongelijke lengte. De resterende data schuift dan op en daardoor zijn alle checksum ongelijk. Dit betekent dat dat bij een bit meer of minder aan het begin van het bestand alle data opnieuw verstuurd moet worden. Bij grote bestanden gaat dat een probleem worden.
Een idee wat ik heb is gaan zoeken in het bestand naar het punt waarop de checksums weer overeenkomen met de server. Dus dan zou je zoiets in pseudocode krijgen:
code:
1
2
3
4
5
6
7
8
9
10
11
12
13
| while( fread( buffer, BLOCK_LENGTH, file ) > 0 ) { checksum = get_block_checksum( buffer ); if( !server_has_checksum( checksum ) ) { changed_data[pointer] = buffer[0]; fseek( file, pointer_where_data_was_unchanged + (++pointer), SEEK_SET ); } else { // upload changed_data } } |
Dit is een manier om het op te lossen, alleen past deze het encryptie algoritme aan, zodat een kleine wijziging in het bestand ook een kleine wijziging in de encrypted data betekent. Dat wil ik echter niet, ik wil uitgaan van bestaande standaarden en niet m'n eigen encryptie gaan schrijven.
Heeft iemand hier een beter idee?
[ Voor 12% gewijzigd door Hmail op 26-08-2016 15:45 ]
It might sound as if I have no clue what I'm doing, but I actually have a vague idea.