Basically, you split your data into blocks, XOR random blocks together and the client can recreate the data by solving the equation of which blocks where XORed with which.
A good tutorial is here: http://blog.notdot.net/2012/01/Damn-Cool-Algorithms-Fountain...
And a fast implementation: http://en.wikipedia.org/wiki/Raptor_code