Welcome to the official BlackBerry Support Community Forums.

This is your resource to discuss support topics with your peers, and learn from each other.

inside custom component

Java Development

Posts: 47
Registered: ‎03-09-2011
My Device: Torch 9800
My Carrier: Airtel

Encryption and Decryption

[ Edited ]

Hii All,


I am desining an application in which I want to encrypt the message and i did  it by using  TripleDESEncryptorEngine 

but the problem is that  TripleDESEncryptorEngine genrate random encrypted data everytime for the same text 


but I want to genrate same encypted data for the same text everytime  if anyone have information regarding this please reply as soon as possible  

Thanks & Regard
Zakir Hussain
Posts: 19,636
Registered: ‎07-14-2008
My Device: Not Specified

Re: Encryption and Decryption

"TripleDESEncryptorEngine generate random encrypted data everytime for the same text "


Since this algorithm was the preferred US standard for encryption for a number of years, and the BlackBerry implementation used to be the standard encryption for BES data traffic (at least that is what I have been told), I doubt very much that this will generate random encrypted data.  I suspect you are not using correctly. 


That said, I've always found it a tricky algorithm to use and I recommend that you look instead at AES.  not only is it a stronger encryption, it is also more efficient!!


You should find sample code for doing encryption if you look round the API.  In case you can't, here is a copy from the OS 5.0 API doc.


    // sampleAESEncryption
    private static int sampleAESEncryption(
        byte[] secretKey, int keyLength, int blockLength, byte[] plainText, byte[] cipherText, int dataLength )
        throws CryptoException, IOException
        // First create the AES key based on the bytes in secretKey using
        // keyLength bits as the length
        AESKey key = new AESKey( secretKey, keyLength );
        // Create the output stream to store the encrypted data
        NoCopyByteArrayOutputStream out = new NoCopyByteArrayOutputStream();
        // Now create the block encryptor and pass in a new instance
        // of an AES encryptor engine with the specified block length
        BlockEncryptor cryptoStream = new BlockEncryptor(
            new AESEncryptorEngine( key ), out );
        // Write the plaintext to the AES encryption stream       
        cryptoStream.write( plainText, 0, dataLength );
        // Copy the encrypted data from the output stream to the ciphertext
        // buffer and return the number of bytes actually in the buffer
        int finalLength = out.size();
        System.arraycopy( out.getByteArray(), 0, cipherText, 0, finalLength );
        return finalLength;