A computer-implemented method, implemented by hardware in combination with software, the method comprising: obtaining a first data stream signature for a first data stream, the first data stream signature comprising an association between a plurality ( i >1) of synch points (SP j, j=1... i) in the first data stream and a corresponding plurality of block signatures (H j, j=1... i), wherein said associating comprises an ordered sequence of corresponding synch point and block signature pairs (<SP j, H j >, j=1... i), wherein each said block signature (H j, j=1... i - 1) was determined using fewer than all bits between two consecutive synch points (SP j and the next synch point SP j+1); characterized in that the method further comprises: attempting to find a synch point (SP r) of the plurality of synch points (SP j, j=1... i) in a second data stream (S'); and if a particular synch point (SP m) of the plurality of synch points is found in the second data stream (S'), then: determining a block signature (H m) of a block of bits (B m) in the second data stream (S') corresponding to the particular synch point (SP m), wherein the block signature (H m) is determined by applying a hash function or message digest function (h) to the block of bits_(B m) corresponding to the particular synch point (SP m) in the second data stream (S'); and ascertaining whether or not the particular_synch point (SP m) and the corresponding block signature (H m) from the second data stream (S') correspond to a synch point and block signature pair in the first data stream signature; and when the particular_synch point and the corresponding block signature from the second data stream correspond to a synch point and block signature pair in the first data stream signature, maintaining count information indicative of the correspondence; repeating steps and while at least some of the second data stream remains unprocessed, until a predetermined number of synch points and corresponding block signatures from the second data stream match synch points and corresponding block signatures in the first data stream signature; indicating a match between the first data stream and the second data stream (S')when the predetermined number of synch points and corresponding block signatures from the second data stream match synch points and corresponding block signatures in the first data stream signature. obtaining a first data stream signature for a first data stream, the first data stream signature comprising an association between a plurality ( i >1) of synch points (SP j, j=1... i) in the first data stream and a corresponding plurality of block signatures (H j, j=1... i), wherein said associating comprises an ordered sequence of corresponding synch point and block signature pairs (<SP j, H j >, j=1... i), wherein each said block signature (H j, j=1... i - 1) was determined using fewer than all bits between two consecutive synch points (SP j and the next synch point SP j+1); characterized in that the method further comprises: attempting to find a synch point (SP r) of the plurality of synch points (SP j, j=1... i) in a second data stream (S'); and if a particular synch point (SP m) of the plurality of synch points is found in the second data stream (S'), then: determining a block signature (H m) of a block of bits (B m) in the second data stream (S') corresponding to the particular synch point (SP m), wherein the block signature (H m) is determined by applying a hash function or message digest function (h) to the block of bits_(B m) corresponding to the particular synch point (SP m) in the second data stream (S'); and ascertaining whether or not the particular_synch point (SP m) and the corresponding block signature (H m) from the second data stream (S') correspond to a synch point and block signature pair in the first data stream signature; and when the particular_synch point and the corresponding block signature from the second data stream correspond to a synch point and block signature pair in the first data stream signature, maintaining count information indicative of the correspondence; determining a block signature (H m) of a block of bits (B m) in the second data stream (S') corresponding to the particular synch point (SP m), wherein the block signature (H m) is determined by applying a hash function or message digest function (h) to the block of bits_(B m) corresponding to the particular synch point (SP m) in the second data stream (S'); and ascertaining whether or not the particular_synch point (SP m) and the corresponding block signature (H m) from the second data stream (S') correspond to a synch point and block signature pair in the first data stream signature; and when the particular_synch point and the corresponding block signature from the second data stream correspond to a synch point and block signature pair in the first data stream signature, maintaining count information indicative of the correspondence; repeating steps and while at least some of the second data stream remains unprocessed, until a predetermined number of synch points and corresponding block signatures from the second data stream match synch points and corresponding block signatures in the first data stream signature; indicating a match between the first data stream and the second data stream (S')when the predetermined number of synch points and corresponding block signatures from the second data stream match synch points and corresponding block signatures in the first data stream signature.