TripleDES Encryption issue

Discussion in 'ASP .Net' started by jdn, Sep 6, 2003.

  1. jdn

    jdn Guest

    I'm new to using this part of the framework, so I'm hoping I've done
    something obviously stupid, which someone will be able to point out in
    an obvious manner.

    Most of the samples I've seen involved encrypting and decrypting to and
    from a file, but that's not what I want. I want to be able to insert a
    string into an encryption function which outputs that encrypted string,
    which could then be sent into a decryption function and spit out the
    original string.

    As you might expect, ultimately, I want to be able to put this string
    into a database table.

    Anyways, I set up a simple test page where I enter a string in a
    textbox, and then run it through an encrypt, then decrypt, function, and
    print out to some labels to make sure it is doing it correctly.

    The encrypt part seems to work (at least the function doesn't fail), but
    the decrypt function fails, with an error saying that the length of the
    encrypted string is invalid. Here are the functions:

    **************************************************************

    public static string Encrypt(string StringToEncrypt){
    string EncryptedString;
    UTF8Encoding utf8encoder = new UTF8Encoding();
    byte[] inputInBytes = utf8encoder.GetBytes(StringToEncrypt);
    TripleDESCryptoServiceProvider tdesProvider = new
    TripleDESCryptoServiceProvider();
    ICryptoTransform cryptoTransform =
    tdesProvider.CreateEncryptor(tdeskey, tdesIV);
    MemoryStream encryptedStream = new MemoryStream();
    CryptoStream cryptStream = new CryptoStream(encryptedStream,
    cryptoTransform, CryptoStreamMode.Write);

    cryptStream.Write(inputInBytes, 0, inputInBytes.Length);
    cryptStream.FlushFinalBlock();
    encryptedStream.Position = 0;

    byte[] result = new byte[encryptedStream.Length - 1];
    encryptedStream.Read(result, 0, (int)(encryptedStream.Length - 1));
    cryptStream.Close();

    UTF8Encoding myutf = new UTF8Encoding();
    EncryptedString = myutf.GetString(result);
    return EncryptedString;
    }//end Encrypt

    public static string Decrypt(string StringToDecrypt){
    string DecryptedString;


    UTF8Encoding utf8encoder = new UTF8Encoding();
    byte[] inputInBytes = utf8encoder.GetBytes(StringToDecrypt);
    TripleDESCryptoServiceProvider tdesProvider = new
    TripleDESCryptoServiceProvider();
    ICryptoTransform cryptoTransform =
    tdesProvider.CreateDecryptor(tdeskey, tdesIV);
    MemoryStream decryptedStream = new MemoryStream();
    CryptoStream cryptStream = new CryptoStream(decryptedStream,
    cryptoTransform, CryptoStreamMode.Write);

    cryptStream.Write(inputInBytes, 0, (inputInBytes.Length));
    cryptStream.FlushFinalBlock();
    decryptedStream.Position = 0;

    byte[] result = new byte[decryptedStream.Length - 1];
    decryptedStream.Read(result, 0, (int)(decryptedStream.Length - 1));
    cryptStream.Close();

    DecryptedString = result.ToString();

    return DecryptedString;
    }//end Decrypt

    ************************************************************************

    cryptStream.FlushFinalBlock() in the decrypt function is what fails.

    Any ideas would be greatly welcomed.

    jdn
     
    jdn, Sep 6, 2003
    #1
    1. Advertisements

  2. Change the stream type. The encryption samples use a file stream, but any
    type of stream can be used to encrypt/decrypt. I have seen plenty of samples
    with strings, as well as files, but you are correct that many of the samples
    are file based.

    Hope this helps.

    --
    Gregory A. Beamer
    MPV; MCP: +I, SE, SD, DBA

    **********************************************************************
    Think outside the box!
    **********************************************************************
    "jdn" <> wrote in message
    news:...
    > I'm new to using this part of the framework, so I'm hoping I've done
    > something obviously stupid, which someone will be able to point out in
    > an obvious manner.
    >
    > Most of the samples I've seen involved encrypting and decrypting to and
    > from a file, but that's not what I want. I want to be able to insert a
    > string into an encryption function which outputs that encrypted string,
    > which could then be sent into a decryption function and spit out the
    > original string.
    >
    > As you might expect, ultimately, I want to be able to put this string
    > into a database table.
    >
    > Anyways, I set up a simple test page where I enter a string in a
    > textbox, and then run it through an encrypt, then decrypt, function, and
    > print out to some labels to make sure it is doing it correctly.
    >
    > The encrypt part seems to work (at least the function doesn't fail), but
    > the decrypt function fails, with an error saying that the length of the
    > encrypted string is invalid. Here are the functions:
    >
    > **************************************************************
    >
    > public static string Encrypt(string StringToEncrypt){
    > string EncryptedString;
    > UTF8Encoding utf8encoder = new UTF8Encoding();
    > byte[] inputInBytes = utf8encoder.GetBytes(StringToEncrypt);
    > TripleDESCryptoServiceProvider tdesProvider = new
    > TripleDESCryptoServiceProvider();
    > ICryptoTransform cryptoTransform =
    > tdesProvider.CreateEncryptor(tdeskey, tdesIV);
    > MemoryStream encryptedStream = new MemoryStream();
    > CryptoStream cryptStream = new CryptoStream(encryptedStream,
    > cryptoTransform, CryptoStreamMode.Write);
    >
    > cryptStream.Write(inputInBytes, 0, inputInBytes.Length);
    > cryptStream.FlushFinalBlock();
    > encryptedStream.Position = 0;
    >
    > byte[] result = new byte[encryptedStream.Length - 1];
    > encryptedStream.Read(result, 0, (int)(encryptedStream.Length - 1));
    > cryptStream.Close();
    >
    > UTF8Encoding myutf = new UTF8Encoding();
    > EncryptedString = myutf.GetString(result);
    > return EncryptedString;
    > }//end Encrypt
    >
    > public static string Decrypt(string StringToDecrypt){
    > string DecryptedString;
    >
    >
    > UTF8Encoding utf8encoder = new UTF8Encoding();
    > byte[] inputInBytes = utf8encoder.GetBytes(StringToDecrypt);
    > TripleDESCryptoServiceProvider tdesProvider = new
    > TripleDESCryptoServiceProvider();
    > ICryptoTransform cryptoTransform =
    > tdesProvider.CreateDecryptor(tdeskey, tdesIV);
    > MemoryStream decryptedStream = new MemoryStream();
    > CryptoStream cryptStream = new CryptoStream(decryptedStream,
    > cryptoTransform, CryptoStreamMode.Write);
    >
    > cryptStream.Write(inputInBytes, 0, (inputInBytes.Length));
    > cryptStream.FlushFinalBlock();
    > decryptedStream.Position = 0;
    >
    > byte[] result = new byte[decryptedStream.Length - 1];
    > decryptedStream.Read(result, 0, (int)(decryptedStream.Length - 1));
    > cryptStream.Close();
    >
    > DecryptedString = result.ToString();
    >
    > return DecryptedString;
    > }//end Decrypt
    >
    > ************************************************************************
    >
    > cryptStream.FlushFinalBlock() in the decrypt function is what fails.
    >
    > Any ideas would be greatly welcomed.
    >
    > jdn
    >
    >
     
    Cowboy \(Gregory A Beamer\), Sep 6, 2003
    #2
    1. Advertisements

  3. jdn

    jdn Guest

    Cowboy (Gregory A Beamer) wrote:

    > Change the stream type. The encryption samples use a file stream, but any
    > type of stream can be used to encrypt/decrypt. I have seen plenty of samples
    > with strings, as well as files, but you are correct that many of the samples
    > are file based.
    >
    > Hope this helps.
    >


    Change the stream type to what?

    Thanks.

    jdn
     
    jdn, Sep 7, 2003
    #3
  4. jdn

    jdn Guest

    Cowboy (Gregory A Beamer) wrote:

    > Change the stream type. The encryption samples use a file stream, but any
    > type of stream can be used to encrypt/decrypt. I have seen plenty of samples
    > with strings, as well as files, but you are correct that many of the samples
    > are file based.
    >
    > Hope this helps.
    >



    Why would changing the stream type fix the issue? It seems to have to
    do with how the decrypt function is written or maybe with how the
    encrypt function writes the string.

    jdn
     
    jdn, Sep 7, 2003
    #4
  5. jdn

    Drebin Guest

    There are several kinds of streams, IO streams, memory streams, XML streams.. etc.. so if you are dealing with a filestream - then you will only really be able to read/write from a file.. if you want to read/write to a variable, you likely need a MemoryStream or some equivalent..


    "jdn" <> wrote in message news:...
    Cowboy (Gregory A Beamer) wrote:

    > Change the stream type. The encryption samples use a file stream, but any
    > type of stream can be used to encrypt/decrypt. I have seen plenty of samples
    > with strings, as well as files, but you are correct that many of the samples
    > are file based.
    >
    > Hope this helps.
    >



    Why would changing the stream type fix the issue? It seems to have to
    do with how the decrypt function is written or maybe with how the
    encrypt function writes the string.

    jdn
     
    Drebin, Sep 8, 2003
    #5
  6. jdn

    jdn Guest

    Drebin wrote:

    > There are several kinds of streams, IO streams, memory streams, XML streams.. etc.. so if you are dealing with a filestream - then you will only really be able to read/write from a file.. if you want to read/write to a variable, you likely need a MemoryStream or some equivalent..
    >
    >
    > "jdn" <> wrote in message news:...
    > Cowboy (Gregory A Beamer) wrote:
    >
    >
    >>Change the stream type. The encryption samples use a file stream, but any
    >>type of stream can be used to encrypt/decrypt. I have seen plenty of samples
    >>with strings, as well as files, but you are correct that many of the samples
    >>are file based.
    >>
    >>Hope this helps.
    >>

    >
    >
    >
    > Why would changing the stream type fix the issue? It seems to have to
    > do with how the decrypt function is written or maybe with how the
    > encrypt function writes the string.
    >
    > jdn
    >


    No, I know that. Since I am trying to Encrypt and Decrypt using
    MemoryStream and CryptoStream both places, I don't see how changing that
    will solve the issue. Though maybe I'm missing something.
     
    jdn, Sep 8, 2003
    #6
    1. Advertisements

Want to reply to this thread or ask your own question?

It takes just 2 minutes to sign up (and it's free!). Just click the sign up button to choose a username and then you can ask your own questions on the forum.
Similar Threads
  1. Jonas
    Replies:
    0
    Views:
    706
    Jonas
    Oct 10, 2003
  2. =?Utf-8?B?Y2h1YXls?=

    what is TripleDes algorithm DES-EDE3/ECB/NONE

    =?Utf-8?B?Y2h1YXls?=, Jun 8, 2005, in forum: ASP .Net
    Replies:
    1
    Views:
    899
    Alvin Bruney [MVP - ASP.NET]
    Jun 9, 2005
  3. Celia

    TripleDES with Hexadecimal Key

    Celia, Jan 13, 2008, in forum: ASP .Net
    Replies:
    1
    Views:
    457
    George Ter-Saakov
    Jan 14, 2008
  4. jdn

    TripleDES Encryption issue

    jdn, Sep 6, 2003, in forum: ASP .Net Security
    Replies:
    6
    Views:
    193
  5. Lech Migdal

    encrypt with TripleDES, decrypt with DES, doesnt work ?

    Lech Migdal, Apr 7, 2004, in forum: ASP .Net Security
    Replies:
    1
    Views:
    281
    Hernan de Lahitte
    Apr 7, 2004
Loading...

Share This Page