1. A system for storing encrypted data, comprising: a processor configured to: receive an encrypted segment, wherein the encrypted segment is determined by encrypting a first segment, wherein the first segment is one of one or more segments that are determined by breaking a data stream, a data block, or a data file, wherein for the first segment and a second segment that is identical to the first segment, an encrypted first segment is identical to an encrypted second segment; receive 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; in the event that the encrypted segment is determined to have not been previously stored, store the encrypted segment and the metadata information associated with the encrypted segment; in the event that the encrypted segment is determined to have been previously stored, store only a reference to the previously stored encrypted segment, wherein the reference indicates a mapping between the previously stored encrypted segment and 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.