ТЕ по вашему даже от имени файла его хэш не будет изменятся?
Почитал в интернете, получается в торрент файл пишут не общий хэш всего файла, а хэши кусков.
А то что отображается в клиенте и в трекере это некий хэш хэшей.
Но опять же не видно связи с именем файла, а она есть!
Думаю лучше всего посмотреть алгоритм в исходнике одной из прогорамм для создания torrent файлов, например createtorrent-1.1.4
Процесс создания torrent файла для дирриктории рассматривать не будем.
В общем при работе с одним файлом обращение идёт сразу в int create_from_file( const char* src, FILE* f, long long fsize, int piecelen )
Код
src - путь до исходного файла, который добавляет
fsize - соотв размер файла
piecelen - !!!размер одного куска!!!
int create_from_file( const char* src, FILE* f, long long fsize, int piecelen )
{
char* sha;
char* buf;
int r, shalen;
FILE* fs = fopen( src, "rb" );
// "length", "name", "piece length", "pieces"
fprintf( f, "6:lengthi%llde", fsize );
write_name( src, f );
fprintf( f, "12:piece lengthi%de", piecelen );
shalen = fsize / piecelen;
if( fsize % piecelen )
shalen++;
fprintf( f, "6:pieces%d:", shalen * 20 );
if( fs ) {
sha = (char*) malloc( sizeof(char) * SHA_DIGEST_LENGTH );
buf = (char*) malloc( piecelen );
printf( "computing sha1... " );
fflush( stdout );
while( ( r = fread( buf, 1, piecelen, fs ) ) ) //читаем из исходного файла один кусок
{
SHA1( buf, r, sha ); //счтиаем его хэш (куска)
fwrite( sha, 1, 20, f ); //пишем его в свежесозданный torrent файл
}
free( buf );
free( sha );
fclose( fs );
printf( "done\n" );
} else {
fprintf( stderr, "could not open file %s\n", src );
return 1;
}
return 0;
}
Больше никаких подсчётов хэшей, связанных с созданием torrent файла для одного программа не производит.
Непонятно почему у меня хэш изменляся при изменении имени файла. Сейчас попробую указать размер куска как в оригинальном торрент файле.