A system for storing encrypted data, comprising: a processor configured to: receive an encrypted segment, wherein the encrypted segment is determined by breaking a data stream, a data block, or a data file into one or more segments and encrypting each of the one or more segments, wherein the breaking the data stream, the data block, or the data file is based at least in part on a non-content based technique, and wherein the encrypted segment has a one-to-one correspondence with a given segment of the one or more segments; receiving metadata information associated with the encrypted segment, wherein the metadata information includes information used to reconstruct the data stream, the data block, or the data file, wherein the metadata information comprises encryption type and pad type; determine whether the encrypted segment has been previously stored to determine whether an encrypted form of the given segment has been previously stored; in the event that the encrypted segment has not been previously stored, store the encrypted segment and a metadata information associated with the encrypted segment; in the event that the encrypted segment is determined to have been previously stored, store a reference to the previously stored encrypted segment, wherein the reference is stored in an index that associates a mapping between one or more data streams, data blocks, or data files and the segments determined from the one or more data streams, data blocks, or data files, and wherein each of at least a subset of a plurality of stored encrypted segments is used to reconstruct more than one data stream, data block, or data file; and a memory coupled to the processor and configured to provide the processor with instructions. receive an encrypted segment, wherein the encrypted segment is determined by breaking a data stream, a data block, or a data file into one or more segments and encrypting each of the one or more segments, wherein the breaking the data stream, the data block, or the data file is based at least in part on a non-content based technique, and wherein the encrypted segment has a one-to-one correspondence with a given segment of the one or more segments; receiving metadata information associated with the encrypted segment, wherein the metadata information includes information used to reconstruct the data stream, the data block, or the data file, wherein the metadata information comprises encryption type and pad type; determine whether the encrypted segment has been previously stored to determine whether an encrypted form of the given segment has been previously stored; in the event that the encrypted segment has not been previously stored, store the encrypted segment and a metadata information associated with the encrypted segment; in the event that the encrypted segment is determined to have been previously stored, store a reference to the previously stored encrypted segment, wherein the reference is stored in an index that associates a mapping between one or more data streams, data blocks, or data files and the segments determined from the one or more data streams, data blocks, or data files, and wherein each of at least a subset of a plurality of stored encrypted segments is used to reconstruct more than one data stream, data block, or data file; and a memory coupled to the processor and configured to provide the processor with instructions.