A hardware data compressor that is configured to compress an input block of characters by replacing strings of characters in the input block with back pointers to matching strings earlier in the input block, the hardware data compressor comprising: a scanning engine that is configured to scan the input block of characters and to use a plurality of hash chains, which are lists of nodes to produce the back pointers, wherein each node points to a character in the input block previously scanned and has an associated probability that a back pointer to a matching string that begins with the pointed-to character will be produced by the scanning engine; a chain sort engine that, for each list of nodes of the plurality of lists, is configured to sort the list according to the probabilities of the nodes in the list so that higher probability nodes appear earlier in the list for use by the scanning engine to search for matching strings during the scan of the input block of characters; a hash table for use in searching for the matching strings in the input block; a plurality of hash index generators, each hash index generator of the plurality of hash index generators is configured to employ a different hashing algorithm on an initial portion of the strings of characters to be replaced to generate a respective index, that indexes to an entry of the hash table that is the head of one of the hash chain of pointers to locations in the input block that previously hashed to the same index; and a selector that is configured to select the index generated by of one of the plurality hash index generators to index into the hash table based on a type of the input block, wherein the type of the input block is determined according to an indication of input block type, wherein a first of the plurality of hash index generators is configured to hash all but the most significant bit of each of the characters of the initial portion of the strings, and the selector is configured to select the index generated by the first of the plurality of hash index generators if the type of the input block indicates that the character encoding of the input block is ASCII. a scanning engine that is configured to scan the input block of characters and to use a plurality of hash chains, which are lists of nodes to produce the back pointers, wherein each node points to a character in the input block previously scanned and has an associated probability that a back pointer to a matching string that begins with the pointed-to character will be produced by the scanning engine; a chain sort engine that, for each list of nodes of the plurality of lists, is configured to sort the list according to the probabilities of the nodes in the list so that higher probability nodes appear earlier in the list for use by the scanning engine to search for matching strings during the scan of the input block of characters; a hash table for use in searching for the matching strings in the input block; a plurality of hash index generators, each hash index generator of the plurality of hash index generators is configured to employ a different hashing algorithm on an initial portion of the strings of characters to be replaced to generate a respective index, that indexes to an entry of the hash table that is the head of one of the hash chain of pointers to locations in the input block that previously hashed to the same index; and a selector that is configured to select the index generated by of one of the plurality hash index generators to index into the hash table based on a type of the input block, wherein the type of the input block is determined according to an indication of input block type, wherein a first of the plurality of hash index generators is configured to hash all but the most significant bit of each of the characters of the initial portion of the strings, and the selector is configured to select the index generated by the first of the plurality of hash index generators if the type of the input block indicates that the character encoding of the input block is ASCII.