title: Is there a way to narrow the search space of a CRC hash to identify the original message?
body: <p>I am looking for an efficient way to reduce the set of possible messages for a CRC hash, given an arbitrary hash value and known message size. Using brute force to calculate all possible collisions is not feasible for a large messageLength. Assume that the hash length is at least 100 times smaller than the messageLength (messageLength of 100K and hash size is 1K)</p>
  
  <p>Example:</p>
  
  <pre><code>List&lt;byte[]&gt; ComputeCollisions(byte[] hash, int messageLength){
    var collisions = new List&lt;byte[]&gt;();
    //do some magic
    return collisions;
  }
  </code></pre>
  
  <p>Given how simple the CRC hash function works, I tend to believe that there is some way to do it, similar to unzipping it backwards, I just cannot figure out how to do it.  To reduce the search space further would knowing the first or last XOR applied help at all?</p>