Hi Samuel,

Follow the thread below. It has some nice commentaries on DES, IVs, etc.

http://www.mail-archive.com/[email protected]/msg01680.html

Jeffrey Walton

-----Original Message-----
From: Samuel Mota [mailto:[EMAIL PROTECTED] 
Sent: Monday, December 06, 2004 1:32 PM
To: [EMAIL PROTECTED]
Subject: Really simple DES encryption

Hi,

Sorry if this is a stupid question, but I know almost nothing about
cryptography theory but I need
to encrypt and decrypt a message using DES ....

But for now I can't figure out what should be the Initialization Vector ...
the guys who encrypted
the msg have no idea wich iv was used (they have no idea what is iv since
they are using a product
built in encryption api call) ... I have read somewhere that with DES the IV
should be the key
vector, but I'm not getting their result when encrypting the same message
with the same key.

The code bothered from the FAQ ... note that plaintext and key are already
created as a byte array
.... could someone point me to some direction? (the expected result is 0x21
0x79 0xAD 0xB9 0x24 0x59
0xEE 0xE3)

      //lenght Needs to be a multiple of 8
      byte plaintext[] = { 0x06, 0x12, 0x34, 0x56, 0xFF, 0xFF, 0xFF, 0xFF };
      byte * ciphertext;
      byte * result;

      HexEncoder hexEncoder3;
      unsigned int outputLength;

      const byte key[] = { 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61, 0x61 };

      // encrypt
      CBC_Mode<DES>::Encryption ecbEncryption(key,DES::DEFAULT_KEYLENGTH,
key);
      StreamTransformationFilter encryptor(ecbEncryption,
NULL,StreamTransformationFilter::NO_PADDING);
      encryptor.Put(plaintext, sizeof(plaintext));
      encryptor.MessageEnd();

      outputLength = encryptor.MaxRetrievable();
      ciphertext = new byte[outputLength];
      encryptor.Get(ciphertext, outputLength);

      cout << "outputLength is: " << outputLength << endl;

      hexEncoder3.Put(ciphertext, outputLength);
      hexEncoder3.MessageEnd();
      byte * pData3;
      pData3 = new byte[outputLength*2];
      hexEncoder3.Get(pData3, outputLength*2);

      int j=0;
      cout << "Encrypted Data is: ";
      for (j=0; j<(outputLength*2); j++) {
             cout << pData3[j];
      }
      cout << endl;

      // now decrypt
      CBC_Mode<DES>::Decryption ecbDecryption(key,
                                          DES::DEFAULT_KEYLENGTH, key);
      StreamTransformationFilter decryptor(ecbDecryption, NULL,
 
StreamTransformationFilter::NO_PADDING);
      decryptor.Put(ciphertext, outputLength);
      decryptor.MessageEnd();

      outputLength = decryptor.MaxRetrievable();
      result = new byte[outputLength];
      decryptor.Get(result, outputLength);

      cout << "ciphertext size is " << sizeof(ciphertext) << endl;
      cout << "recovered plaintext is " << result << endl;


      delete [] ciphertext;
      delete [] result;

      return 0;

Reply via email to