1. A method for encrypting data, the method comprising: providing a data source, configured to receive initialization parameters and an offset and to output data corresponding to the initialization parameters, the number of times data is output by the random number source, and the offset; inputting initialization parameters to the random data source; providing an input store comprising memory storing input data; providing an output store comprising memory for storing output data; and executing a substitution process, the substitution process, comprising outputting a byte length from the random data source, reading an input string having an input string length from the input store having a length corresponding to the bit length, inputting the input string as the offset to the data source, outputting a cipher string from the data source having a length equal to the input string length, and writing the cipher string to the output store.