A method of encoding data from received input data into encoded data that is encoded according to a code having systematic output symbols and non-systematic output symbols and that can be stored in machine-readable form and/or transmitted electronically, the method comprising: generating, from the input data, a set of input symbols; outputting the set of input symbols as the systematic output symbols; computing with a systematic key generator systematic keys for the input symbols in the set of input symbols using random numbers generated by a random number generator; generating, from the set of input symbols and corresponding systematic keys, a plurality of intermediate input symbols in a chain reaction decoding process; generating with a non-systematic key generator non-systematic keys for the plurality of intermediate input symbols using random numbers generated by said random number generator; and chain reaction encoding the plurality of intermediate input symbols into one or more non-systematic output symbols using the non-systematic keys, wherein one or more intermediate input symbols are encoded into one non-systematic output symbol, wherein each of the one or more non-systematic output symbols is selected from an alphabet of non-systematic output symbols, wherein, for each non-systematic key, a non-systematic output symbol is generated as a function of one or more of the plurality of intermediate input symbols and the non-systematic key, and wherein any subset of the set of input symbols that will not be acquired by a receiver of the code is recoverable from (i) a predetermined number of non-systematic output symbols that will be acquired or (ii) a combination of (a) input symbols that will be acquired and (b) one or more of the non-systematic output symbols that will be acquired. generating, from the input data, a set of input symbols; outputting the set of input symbols as the systematic output symbols; computing with a systematic key generator systematic keys for the input symbols in the set of input symbols using random numbers generated by a random number generator; generating, from the set of input symbols and corresponding systematic keys, a plurality of intermediate input symbols in a chain reaction decoding process; generating with a non-systematic key generator non-systematic keys for the plurality of intermediate input symbols using random numbers generated by said random number generator; and chain reaction encoding the plurality of intermediate input symbols into one or more non-systematic output symbols using the non-systematic keys, wherein one or more intermediate input symbols are encoded into one non-systematic output symbol, wherein each of the one or more non-systematic output symbols is selected from an alphabet of non-systematic output symbols, wherein, for each non-systematic key, a non-systematic output symbol is generated as a function of one or more of the plurality of intermediate input symbols and the non-systematic key, and wherein any subset of the set of input symbols that will not be acquired by a receiver of the code is recoverable from (i) a predetermined number of non-systematic output symbols that will be acquired or (ii) a combination of (a) input symbols that will be acquired and (b) one or more of the non-systematic output symbols that will be acquired.