Using libgcrypt1.2.0 for 3DES,
ECB mode of encryption/decryption.
Vishal Rao
vishalrao at gmail.com
Fri Dec 10 05:25:41 CET 2004
Hi,
Do not use strlen() on plaintext or ciphertext! Its not really text!
If there happens to be a zero in the bytes your strlen will return a
shorter value!
Cheers,
Vishal
On Thu, 9 Dec 2004 09:58:04 -0500, Madhavi.Gandavarapu at equifax.com
<Madhavi.Gandavarapu at equifax.com> wrote:
>
>
> Hi,
>
> I have a string that I am trying to encrypt using 3DES,ECB mode. I have a
> specific 24 byte key that I need to use to encrypt or decrypt.
> I am not getting good encrypted string back, since I can't even decrypt what I
> encrypted with the same key and same library.
>
> Can you point me to what I am doing wrong here.
>
> Here is the code segment.
>
> unsigned char enc_key[24] =
> {0x12,0x34,0x51,0x23,0x45,0x12,0x34,0x51,0x15,0x43,0x21,0x54,0x32,0x15,0x43,0x21,0x45,0x12,0x34,0x51,0x12,
> 0x34,0x51,0x23};
>
> static int do_encrypt(unsigned char* dest,unsigned char* src)
> {
> //GCRY_CIPHER_3DES is the algorithm type
> //GCRY_CIPHER_MODE_ECB is the algorithem mode
> //0(zero) is the flags value to send
> int retVal =0;
> gcry_cipher_hd_t hd;
>
> int keylen;
> int i =0,x=0;
> gcry_error_t err = 0;
>
> keylen = gcry_cipher_get_algo_keylen(GCRY_CIPHER_3DES);
> if (!keylen)
> {
> // fail ("algo %d, mode %d, gcry_cipher_get_algo_keylen failed\n", algo,
> mode);
> logf(&bLog, LF_ERROR, "algo %s, mode %s, gcry_cipher_get_algo_keylen
> failed","GCRY_CIPHER_3DES" ,"GCRY_CIPHER_MODE_ECB" );
> retVal = -1;
> return retVal;
> }
> if (keylen < 40 / 8 || keylen > 32)
> {
> // fail ("algo %d, mode %d, keylength problem (%d)\n", algo, mode, keylen);
> logf(&bLog, LF_ERROR, "algo %s, mode %s, keylength problem
> (%d)","GCRY_CIPHER_3DES" ,"GCRY_CIPHER_MODE_ECB",keylen );
> retVal = -1;
> return retVal;
> }
> err = gcry_cipher_open (&hd, GCRY_CIPHER_3DES, GCRY_CIPHER_MODE_ECB, 0);
> if (err)
> {
> // fail ("algo %d, mode %d, grcy_open_cipher failed: %s\n", algo, mode,
> gpg_strerror (err));
> logf(&bLog, LF_ERROR, "algo %s, mode %s, grcy_open_cipher failed:
> %s","GCRY_CIPHER_3DES" ,"GCRY_CIPHER_MODE_ECB",gpg_strerror(err)
> );
> return err;
>
> }
> err = gcry_cipher_setkey (hd, &enc_key, keylen);
> if (err)
> {
> // fail ("algo %d, mode %d, gcry_cipher_setkey failed: %s\n", algo, mode,
> gpg_strerror (err));
> logf(&bLog, LF_ERROR, "algo %s, mode %s, gcry_cipher_setkey failed:
> %s","GCRY_CIPHER_3DES" ,"GCRY_CIPHER_MODE_ECB",gpg_strerror(er
> r));
> gcry_cipher_close (hd);
> return err;
> }
> //err = gcry_cipher_encrypt (hd, dest, strlen(dest), NULL,strlen(dest));
> err = gcry_cipher_encrypt (hd, dest, strlen(dest), src, strlen(src));
> if (err)
> {
> // fail ("algo %d, mode %d, gcry_cipher_encrypt failed: %s\n", algo, mode,
> gpg_strerror (err));
> logf(&bLog, LF_ERROR, "algo %s, mode %s, gcry_cipher_encrypt failed:
> %s","GCRY_CIPHER_3DES" ,"GCRY_CIPHER_MODE_ECB",gpg_strerror(e
> rr));
> gcry_cipher_close (hd);
> return err;
> }
> i =0; x=0;
> if((x = (strlen(dest)%bsize)))
> {
> x = (bsize - x);
> for(i = 0; i < x; i++)
> strcat(dest," ");
> }
>
> err = gcry_cipher_decrypt (hd, dest, strlen(dest), dest, strlen(dest));
> if (err)
> {
> // fail ("algo %d, mode %d, gcry_cipher_decrypt failed: %s\n", algo, mode,
> gpg_strerror (err));
> logf(&bLog, LF_ERROR, "algo %s, mode %s, gcry_cipher_decrypt failed:
> %s","GCRY_CIPHER_3DES" ,"GCRY_CIPHER_MODE_ECB",gpg_strerror(e
> rr));
> gcry_cipher_close (hd);
> return err;
> }
>
> gcry_cipher_close (hd);
>
> Thanks and Regards
> Madhavi
> This message contains information from Equifax Inc. which may be confidential and
> privileged. If you are not an intended recipient, please refrain from any
> disclosure, copying, distribution or use of this information and note that such
> actions are prohibited. If you have received this transmission in error, please
> notify by e-mail postmaster at equifax.com.
>
> _______________________________________________
> Gnupg-users mailing list
> Gnupg-users at gnupg.org
> http://lists.gnupg.org/mailman/listinfo/gnupg-users
>
--
"Thou shalt not follow the null pointer for at its end madness and chaos lie."
More information about the Gnupg-users
mailing list