To obfuscate data I made up this method on the spot without planning since the goal wasn't real encryption.

At first I though this cannot be real encryption but after revisiting the code and reading on block symmetric encryption, and including R in the method, it seems that it is( looks like a stream cypher, OFB specifically ).

The method is the following( pseudo code ):

-Hash function parameters, secret key, hash and array elements all have the same size in bits.
-Size is at least 128 bits for this example.
-Using a cryptographic random generator.

H - cryptographic hash function
K - secret key, randomly generated
A - array of plaintext
L - array length
R - randomly generated, is not encrypted and is stored with the resulting encrypted data

keyhash = H(K)
hash = R
for( i , i < L , i++ )
    hash = H( hash ^ keyhash )
    A[i] ^= hash

Could this be called encryption or it has some fundamental flaws that would break it immediately?

  • $\begingroup$ Don't you mean $C_i = A_i \oplus h$? Otherwise you don't have ciphertext ;) $\endgroup$ – Maarten Bodewes Jan 7 '15 at 0:10
  • $\begingroup$ Of course, ^ is XOR in Java as well, but above you've only defined the plaintext. Now it's also the ciphertext after the operation. $\endgroup$ – Maarten Bodewes Jan 8 '15 at 16:56

Your scheme is indeed an instance of output feedback mode (OFB), using $$(\mathit{key},\mathit{pad}) \mapsto H(\mathit{key}\oplus\mathit{pad})\text,$$ where $\mathit{key}$ corresponds to keyhash and $\mathit{pad}$ to hash, as the "block cipher". (It is very likely not really a block cipher due to lack of bijectivity, but that's not needed for output feedback mode.) When $H$ is a cryptographically secure hash function, the construction should have the same security properties as OFB using a "real" block cipher; however, since hash functions are usually slower than block ciphers, one generally prefers to use the latter.


You are creating a bitstream and XORing it with your plaintext so yes, it is. More precisely, it's a block cipher. Have a look at a previous discussion.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.