Skip to Main Content

Java Security

Announcement

For appeals, questions and feedback about Oracle Forums, please email oracle-forums-moderators_us@oracle.com. Technical questions should be asked in the appropriate category. Thank you!

Encryption without special charactors.

Kashif IftikharApr 26 2014

Hi Everyone,

I'm trying to encrypt my file names and folders names.

For this I'm using javax.crypto and sun.misc.BASE64Encoder packages with UTF8 Char-set for encrypting strings which will be used as file/folder names..

The problems is that encrypted string contain special characters like (/,\) and they cannot be used in file/folder names.

Please guide me how can i correct this code. I tried different character set along with sun.misc Encoders but they did not work.

import java.io.UnsupportedEncodingException;

import java.security.InvalidKeyException;

import java.security.NoSuchAlgorithmException;

import java.security.spec.KeySpec;

import javax.crypto.Cipher;

import javax.crypto.NoSuchPaddingException;

import javax.crypto.SecretKey;

import javax.crypto.SecretKeyFactory;

import javax.crypto.spec.DESKeySpec;

import javax.crypto.spec.DESedeKeySpec;

import sun.misc.BASE64Encoder;

import sun.misc.BASE64Decoder;

public class MyEnc

{

    public static final String DESEDE_ENCRYPTION_SCHEME = "DESede";

    public static final String DES_ENCRYPTION_SCHEME = "DES";

    public static final String            DEFAULT_ENCRYPTION_KEY    = "This is a fairly long phrase used to encrypt";

    public static final String encryptionKey = "012345678901234567890123456789";

    public static final String encryptionScheme = DESEDE_ENCRYPTION_SCHEME;

    private KeySpec                keySpec;

    private SecretKeyFactory    keyFactory;

    private Cipher                cipher;

    private static final String    UNICODE_FORMAT            = "UTF8";

    public MyEnc( )

            throws EncryptionException

    {

        if ( encryptionKey == null )

                throw new IllegalArgumentException( "encryption key was null" );

        if ( encryptionKey.trim().length() < 24 )

                throw new IllegalArgumentException(

                        "encryption key was less than 24 characters" );

        try

        {

            byte[] keyAsBytes = encryptionKey.getBytes( UNICODE_FORMAT );

            if ( encryptionScheme.equals( DESEDE_ENCRYPTION_SCHEME) )

            {

                keySpec = new DESedeKeySpec( keyAsBytes );

            }

            else if ( encryptionScheme.equals( DES_ENCRYPTION_SCHEME ) )

            {

                keySpec = new DESKeySpec( keyAsBytes );

            }

            else

            {

                throw new IllegalArgumentException( "Encryption scheme not supported: "

                                                    + encryptionScheme );

            }

            keyFactory = SecretKeyFactory.getInstance( encryptionScheme );

            cipher = Cipher.getInstance( encryptionScheme );

        }

        catch (InvalidKeyException e)

        {

            throw new EncryptionException( e );

        }

        catch (UnsupportedEncodingException e)

        {

            throw new EncryptionException( e );

        }

        catch (NoSuchAlgorithmException e)

        {

            throw new EncryptionException( e );

        }

        catch (NoSuchPaddingException e)

        {

            throw new EncryptionException( e );

        }

    }

    public String encrypt( String unencryptedString ) throws EncryptionException

    {

        if ( unencryptedString == null || unencryptedString.trim().length() == 0 )

                throw new IllegalArgumentException(

                        "unencrypted string was null or empty" );

        try

        {

            SecretKey key = keyFactory.generateSecret( keySpec );

            cipher.init( Cipher.ENCRYPT_MODE, key );

            byte[] cleartext = unencryptedString.getBytes( UNICODE_FORMAT );

            byte[] ciphertext = cipher.doFinal( cleartext );

            BASE64Encoder base64encoder = new BASE64Encoder();

            return base64encoder.encode( ciphertext );

        }

        catch (Exception e)

        {

            throw new EncryptionException( e );

        }

    }

    public String decrypt( String encryptedString ) throws EncryptionException

    {

        if ( encryptedString == null || encryptedString.trim().length() <= 0 )

                throw new IllegalArgumentException( "encrypted string was null or empty" );

        try

        {

            SecretKey key = keyFactory.generateSecret( keySpec );

            cipher.init( Cipher.DECRYPT_MODE, key );

            BASE64Decoder base64decoder = new BASE64Decoder();

            byte[] cleartext = base64decoder.decodeBuffer( encryptedString );

            byte[] ciphertext = cipher.doFinal( cleartext );

            return bytes2String( ciphertext );

        }

        catch (Exception e)

        {

            throw new EncryptionException( e );

        }

    }

    private static String bytes2String( byte[] bytes )

    {

        StringBuffer stringBuffer = new StringBuffer();

        for (int i = 0; i < bytes.length; i++)

        {

            stringBuffer.append( (char) bytes[i] );

        }

        return stringBuffer.toString();

    }

    public static class EncryptionException extends Exception

    {

        public EncryptionException( Throwable t )

        {

            super( t );

        }

    }

}

Comments
Locked Post
New comments cannot be posted to this locked post.
Post Details
Locked on May 24 2014
Added on Apr 26 2014
0 comments
2,134 views