A method, comprising: obtaining, by a processor, a plurality of documents and/or web pages in plaintext form; generating, by the processor, fingerprints for each of the plurality of documents and/or web pages by generating shingles from text within each of the plurality of documents and/or web pages so that there at least one character overlap between adjacent shingles; and cryptographically hashing the shingles to generate a plurality of document and/or web page fingerprints; storing the document and/or web page fingerprints in a database; receiving, by the processor from a querying party's system, at least one fingerprint that has been cryptographically hashed by the querying party's system; determining, by the processor, whether the received at least one fingerprint matches any of the document and/or web page fingerprints stored in the database; and outputting, in plaintext form, a document and/or web page of the plurality of documents and/or web pages containing a matched fingerprint, wherein the processor and database are part of a first system controlled by a first entity, and wherein the first system is a different system than the querying party's system, wherein the at least one fingerprint is generated by: receiving, by a second processor of the querying party's system, a plaintext query; generating, by the second processor, a plurality of query shingles from the plaintext query so that there is no character overlap between adjacent shingles; cryptographically hashing, by the second processor, the plurality of query shingles to form a plurality of query fingerprints as the at least one fingerprint. obtaining, by a processor, a plurality of documents and/or web pages in plaintext form; generating, by the processor, fingerprints for each of the plurality of documents and/or web pages by generating shingles from text within each of the plurality of documents and/or web pages so that there at least one character overlap between adjacent shingles; and cryptographically hashing the shingles to generate a plurality of document and/or web page fingerprints; generating shingles from text within each of the plurality of documents and/or web pages so that there at least one character overlap between adjacent shingles; and cryptographically hashing the shingles to generate a plurality of document and/or web page fingerprints; storing the document and/or web page fingerprints in a database; receiving, by the processor from a querying party's system, at least one fingerprint that has been cryptographically hashed by the querying party's system; determining, by the processor, whether the received at least one fingerprint matches any of the document and/or web page fingerprints stored in the database; and outputting, in plaintext form, a document and/or web page of the plurality of documents and/or web pages containing a matched fingerprint, wherein the processor and database are part of a first system controlled by a first entity, and wherein the first system is a different system than the querying party's system, wherein the at least one fingerprint is generated by: receiving, by a second processor of the querying party's system, a plaintext query; generating, by the second processor, a plurality of query shingles from the plaintext query so that there is no character overlap between adjacent shingles; cryptographically hashing, by the second processor, the plurality of query shingles to form a plurality of query fingerprints as the at least one fingerprint. receiving, by a second processor of the querying party's system, a plaintext query; generating, by the second processor, a plurality of query shingles from the plaintext query so that there is no character overlap between adjacent shingles; cryptographically hashing, by the second processor, the plurality of query shingles to form a plurality of query fingerprints as the at least one fingerprint.