Take the 2-minute tour ×

I need to create a database column which will store a string encrypted using Triple DES. How do I determine the length of the encrypted string column?

(Answers for algorithms other than Triple DES are also welcome.)

share|improve this question
add comment

3 Answers

up vote 5 down vote accepted

Block-ciphers such as DES, 3DES and AES can only operate on blocks of bytes. DES and 3DES operate on block of 8 bytes and AES on blocks of 16 bytes.

To handle this, you usually apply a reversible padding to your plaintext before encrypting it. It will mostly always be "PKCS"-padding (also called PKCS5- or PKCS7-padding).

PKCS-padding adds at least one byte such that the padded text has a length divisible with the block-length (8 bytes for 3DES). The value of the padding-bytes is the number of bytes added. Fx. ABCDEF is padded to ABCDEF0505050505 and 0011223344556677 is padded to 0011223344566770808080808080808. Note that this is easy to remove: you just look at the final byte of the padded bytes, verify that it is between 1 and the block-length, and remove that number of bytes from the end (verifying that each removed byte has the correct value).

Finally, to answer your question: Assuming you are using 3DES with CBC encryption and PKCS-padding - which you probably are - the encryption of a string of length n will have length:

n + 8 - (n % 8)
share|improve this answer
So if I have 64 bytes to encrypt, n would be 72? –  Gabe Mar 17 '10 at 7:32
Yes, 64 bytes encrypted using 3DES/CBC/PKCS-padding will become 72 bytes after encryption. –  Rasmus Faber Mar 17 '10 at 8:51
add comment

Triple DES uses three 56-bit DES keys, giving 168 bit keys. It's block size is 64-bit.

share|improve this answer
Please elaborate. For example if I have a string 100 characters long, how would I calculate the length of the encrypted string? –  Agnel Kurian Jan 19 '09 at 10:46
(string.length / 8) + 1, assuming 8 bits characters –  Keltia Jan 19 '09 at 10:58
length is in characters (or byte if you prefer) so length / 8 is using 64 bit blocks. –  Keltia Jan 19 '09 at 11:01
add comment

Using Triple DES does not change the string's length but it will be rounded to the next 64 bit boundary. If you intend to "display" it, you'll have to encoded it (like in Base64 though.

As for other algorithms, it is difficult ot answer as there are plenty. Block ciphers will always pad input to match their block size whereas many stream ciphers will not.

share|improve this answer
I just found this: msdn.microsoft.com/en-us/library/… Extract: "The Cipher Text Stealing (CTS) mode handles any length of plain text and produces cipher text whose length matches the plain text length." –  Agnel Kurian Jan 19 '09 at 11:09
add comment

Your Answer


