# find keylength in xor-based encryption

I have found interesting answer, written by GeneQ and now want to understand and implement it. I think, that first point of this answer can be rewritten in follwing way:

suppose we have n bytes of cipher text where $c_i=p_i\oplus {k_{i \mod keyLength}}, i=1,...,n.$

Then, to find $keyLength$ we should for $offsets =1,2,...$ do the follwing:

$offset = 1, c'_i=c_i\oplus{c_{i+offset}}, i =1,...,n$

$offset = 2, c'_i=c_i\oplus{c_{i+offset}}, i =1,...,n$

and so on. After than check how many bytes are the same. Let's save number of same bytes in $numOfIntersect$. Then if $c'_i=c_i$, numOfIntersect++.

Code for this simple algorithm:

byte[] key = new byte[] {48, 49, 50 };
{
byte[] plainText = new byte[br.BaseStream.Length];
byte[] cipherText = new byte[br.BaseStream.Length];
for (int i = 0; i < plainText.Length; i++)
cipherText[i] = Convert.ToByte((int)plainText[i] ^ key[i % key.Length]);

for (int offset = 1; offset <= 16; offset++)
{
byte[] cipherTmpText = new byte[cipherText.Length - offset];
int numOfIntersect = 0;
for (int i = 0; (i + offset) < cipherText.Length; i++)
cipherTmpText[i] = Convert.ToByte((int)cipherText[i] ^ (int)cipherText[i + offset]);
for (int i = 0; i < cipherTmpText.Length; i++)
if (cipherText[i] == cipherTmpText[i])
numOfIntersect++;
Console.WriteLine("Offset - {0}, numOfIntersects - {1}", offset, numOfIntersect);
}
}


Well, this is .

Can`t understand, what i am doing wrong.