0

I'm writing a steganography system which encrypt a text within an image - i decided that i want to encrypt the text as well before i embed it in the picture. The Steganography algorithm works with String input/output.

Due to my whim, i've been trying to use DES and AES algorithm but ran into the Exception above. i'll show for example the encryption/decryption methods of the AES algorithm:

    public static byte[] encryptText(String plainText,SecretKey secKey) throws Exception{
    // AES defaults to AES/ECB/PKCS5Padding in Java 7
    Cipher aesCipher = Cipher.getInstance("AES");
    aesCipher.init(Cipher.ENCRYPT_MODE, secKey);
    byte[] byteCipherText = aesCipher.doFinal(plainText.getBytes());
    return byteCipherText;}


    public static String decryptText(byte[] byteCipherText, SecretKey secKey) throws Exception {
    // AES defaults to AES/ECB/PKCS5Padding in Java 7
    Cipher aesCipher = Cipher.getInstance("AES");
    aesCipher.init(Cipher.DECRYPT_MODE, secKey);
    byte[] bytePlainText = aesCipher.doFinal(byteCipherText);
    return new String(bytePlainText);
}

And here is the calling (Encryption side):

  //sending the text to encrypt using AES algorithm
byte[] cipherText = new AES_Algorithm().encrypt(messageDesc.getText(), key);
  //converting into a String to encrypt using Steganography
newStringtoEncrypt = new String (cipherText);

And here is the calling (Decryption side) - THE EXCEPTION:

  //AES encrypted String after the Steganography's decryption 
String decMessage = dec.decode(path, name);
  //converting the String to byte []
byte [] byteArray = decMessage.getBytes();
try{
    //HERE IS WHERE I GET THE EXCEPTION
    //sending the byte array to decryption
  String original = AES_Algorithm().decrypt(byteArray, key);

Where is the problem?

The keys are similar and the byte arrays as well (i checked it by printing the sequence) - but i have been told that i can't use getBytes() in order to convert from String to byteArray when i intend to use AES/DES decryption algorithm.

Vikrant Kashyap
  • 6,398
  • 3
  • 32
  • 52
prowler
  • 15
  • 4

1 Answers1

1

The output from the encryption is binary, you can't just convert it to String as you do in this code:

byte[] cipherText = new AES_Algorithm().encrypt(messageDesc.getText(), key);
//converting into a String to encrypt using Steganography
newStringtoEncrypt = new String (cipherText);

If you need the encrypted data as String, you need to encode it somehow, e.g. by base64encoding or by hexEncoding

Community
  • 1
  • 1
Ebbe M. Pedersen
  • 7,250
  • 3
  • 27
  • 47