A computer-readable medium for use with electronics capable of executing instructions read from the computer-readable medium in order to implement multi-stage encoding data for transmission from a source to a destination over an erasure communications channel, the computer-readable medium having stored thereon: program code for generating, using static encoding, a plurality of redundant symbols from an ordered set of input symbols representing the data to be encoded for transmission, and wherein the static encoding is an encoding wherein the number of the redundant symbols is determined prior to encoding, and wherein the redundant symbols add redundant information in such a way that recovery of the ordered set of input symbols is possible in face of erasures; and program code for generating, with a dynamic encoder, a plurality of output symbols derived from a combined set of symbols including the ordered set of input symbols and the plurality of redundant symbols, wherein a dynamic key generator generates a dynamic key for each output symbol to be generated, wherein the dynamic encoder receives each dynamic key, and wherein the dynamic encoder generates each output symbol based on the corresponding dynamic key, wherein the number of distinct dynamic keys that can be generated with the dynamic key generator is only limited by the key resolution, wherein the sequence of dynamic keys is randomly or pseudorandomly generated, and each output symbol having a weight representing the number of symbols from the combined set used to generate that output symbol, wherein the weights of the output symbols in the plurality of output symbols are distributed in a way to minimize the number of operations needed to regenerate the ordered set of input symbols, and wherein at least one output symbol is generated from more than one symbol in the combined set of symbols and from less than all of the symbols in the combined set of symbols. program code for generating, using static encoding, a plurality of redundant symbols from an ordered set of input symbols representing the data to be encoded for transmission, and wherein the static encoding is an encoding wherein the number of the redundant symbols is determined prior to encoding, and wherein the redundant symbols add redundant information in such a way that recovery of the ordered set of input symbols is possible in face of erasures; and program code for generating, with a dynamic encoder, a plurality of output symbols derived from a combined set of symbols including the ordered set of input symbols and the plurality of redundant symbols, wherein a dynamic key generator generates a dynamic key for each output symbol to be generated, wherein the dynamic encoder receives each dynamic key, and wherein the dynamic encoder generates each output symbol based on the corresponding dynamic key, wherein the number of distinct dynamic keys that can be generated with the dynamic key generator is only limited by the key resolution, wherein the sequence of dynamic keys is randomly or pseudorandomly generated, and each output symbol having a weight representing the number of symbols from the combined set used to generate that output symbol, wherein the weights of the output symbols in the plurality of output symbols are distributed in a way to minimize the number of operations needed to regenerate the ordered set of input symbols, and wherein at least one output symbol is generated from more than one symbol in the combined set of symbols and from less than all of the symbols in the combined set of symbols.