0) { $read = hash_update_stream($ctx, $fp, $chunkSize); if($read != $chunkSize) { echo "Unexpected read value $read, when we had $remaining bytes left\n"; echo "We ".(feof($fp)?'ARE':'are NOT')." in EOF\n"; } $remaining -= $read; //printf("\r%04.1f%%",(1-$remaining/$length)*100); } //echo "\n"; return hash_final($ctx); } $fp = fopen('sl-x86-3.4.loop1-to-3.4.loop2b.xd3','rb'); $hash = hash_part($fp,0,40*1024*1024); echo "$hash\n"; if ($hash != "40d99ed59fba1844207283d25f833c35") { echo "WHAT THE HELL IS GOING ON\n"; } fclose($fp); ?> This time I was lucky; failed on first try: >for /L %i in (1,1,10) do @php recover.php 40d99ed59fba1844207283d25f833c35 fb03339de843c8e421fc885e01a53ca3 WHAT THE HELL IS GOING ON 40d99ed59fba1844207283d25f833c35 40d99ed59fba1844207283d25f833c35 40d99ed59fba1844207283d25f833c35 40d99ed59fba1844207283d25f833c35 40d99ed59fba1844207283d25f833c35 40d99ed59fba1844207283d25f833c35 40d99ed59fba1844207283d25f833c35 40d99ed59fba1844207283d25f833c35 But no strange $read.