e-CryptIt Engine Xojo Plugin

TwofishCBC.Decrypt Method

Use this function to decrypt a block of data.

Because Twofish works on blocks of 16 bytes then you get the best performance if the block size that you pass to it is dividable by 16. The class has built in cache technology so it will work if the the block size is not dividable by 16, but it will be slower.

Decrypt(
   data as String) as String

Parameters

data
The data to decrypt.

Returns

String

Remarks

If the total size of all blocks that you encrypt is not dividable by 16 then you will get 1 to 15 unencrypted bytes at the end. Because of that then you should add 15 bytes (PaddingBlockSize-1) of random bytes to the end of the encrypted stream to ensure that all of your data gets encrypted.

After you have finished decrypting all of the blocks then you should call FinishDecrypt which will let the decryptor clean up and it will return all untouched bytes there which should be part of the random bytes if you have done as descrbed above.

Because Twofish can only operate with 128,192 and 256 bit keysizes then if you do not supply long enough key then the encryptyion will be guided to next bitmode bellow, that is here is how it works:

Password length >= 32 bytes (256 bits), then you get 256 bit key.
Password length >= 24 bytes (192 bits) (and less than 32 bytes), then you get 256 bit key.
Password length >= 16 bytes (128 bits) (and less than 24 bytes), then you get 128 bit key.
Password length < 16 bytes, then you get a invalid key whcih causes invalid encryptiion.

It is a very good idea to use Hash algorithms to guide the actual password into the desired bitsize to use with the encipher.

See Also

TwofishCBC Class