tags:

views:

205

answers:

5

I was working on some encryption/decryption algorithms and I noticed that the encrypted byte[] arrays always had a length of 33, and the char[] arrays always had a length of 44. Does anyone know why this is?

(I'm using Rijndael encryption.)

A: 

No, no idea at all, but my first thought would be that your encryption algorithm is built such that it removes 1 bit per 10 from the output data.

Only you can know for sure since we cannot see you code from out here :-)

paxdiablo
+1  A: 

That's certainly not true for all encryption algorithms, it must just be a property of the particular one you're using. Without knowing what algorithm it is, I can only guess, but the ratio 33/44 suggests that the algorithm might be compressing each character into 6 bits in the output byte array. That probably means it's making the assumption that no more than 64 distinct characters are used, which is a good assumption for plain text (in fact, that's how base64 decoding works).

But again, without knowing what algorithm you're using, this is all guesswork.

David Zaslavsky
I'm using Rijndael. Thanks.
alord1689
+1  A: 

Without knowing the encryption you're using, its a little tough to determine the exact cause. To start, here's an article on How to Calculate the Size of Encrypted Data. It sounds like you might be using a hash of your plaintext, which is why the result is shorter.

Edit: Heres the source for a Rijndael Implementation. It looks like the ciphertext output is initially the same length as the plaintext input, and then they do a base64 on it, which, as the previous poster mentioned, would reduce your final output to 3/4 of the original input.

John Ellinwood
I'm using Rijndael. Thanks!
alord1689
Great article, thanks!
alord1689
I edited with a more detailed answer
John Ellinwood
+3  A: 

Padding and text encoding. Most encryption algorithms have a block size, and input needs to be padded up to a multiple of that block size. Also, turning binary data into text usually involves the Base64 algorithm, which expands 3 bytes into 4 characters.

Jeffrey Hantin
So it's a property of Base64! That explains a lot. Thank you very much!
alord1689
A: 

It would be a pretty lousy encryption algorithm if it was just replacing bytes one-for-one. That was state of the art 50 years ago, and it didn't work very well even then. :)

Schwern