Solved

Looking for an encryption-/decryption-algorithm which produces short output

Posted on 2007-03-19
3
307 Views
Last Modified: 2008-03-04
Hi,

I have to find a symmetric encryption-decryption algorithm, which produces short output-data. I used the following code:

                String ENCRYPTION_ALGORITHM = "PBEWithMD5AndDES";
              String pwd = "password";
              PBEParameterSpec PBE_PARAMETER_SPEC =
                  new PBEParameterSpec(new byte[] { (byte)0x01, (byte)0x23, (byte)0x45, (byte)0x67,
                   (byte)0x89, (byte)0xab, (byte)0xcd, (byte)0xef}, 1024);
              if( pwd != null ) {
                  // yes -> fetch the encryption stream
                  Cipher pbe;
                  try {
                      PBEKeySpec pbeKeySpec = new PBEKeySpec(pwd.toCharArray());
                      SecretKeyFactory keyFactory = SecretKeyFactory.getInstance(
                              ENCRYPTION_ALGORITHM);
                      SecretKey pbeKey = keyFactory.generateSecret(pbeKeySpec);
                      pbe = Cipher.getInstance(ENCRYPTION_ALGORITHM);
                      pbe.init(Cipher.ENCRYPT_MODE, pbeKey, PBE_PARAMETER_SPEC);
                  }
                  catch (Exception e) {
                      throw new PdiRuntimeException(e);
                  }
                  ByteArrayOutputStream bufOut = new ByteArrayOutputStream();
                  bufOut.write("Das wird anders werden".getBytes());
                  CipherOutputStream encrOut =  new CipherOutputStream(bufOut, pbe);
                  String s = new BASE64Encoder().encode( bufOut.toByteArray() );
                  System.out.println( s );
                  
                  bufOut.reset();
                  bufOut.write("419".getBytes());
                  encrOut =  new CipherOutputStream(bufOut, pbe);
                  s = new BASE64Encoder().encode( bufOut.toByteArray() );
                  System.out.println( s );
                  
                  bufOut.reset();
                  bufOut.write("4198721987".getBytes());
                  encrOut =  new CipherOutputStream(bufOut, pbe);
                  s = new BASE64Encoder().encode( bufOut.toByteArray() );
                  System.out.println( s );
              }

and got - as I can see - always the next 2^n-character-length. One might say, that´s o.k., to get out of "4198721987", which is 10 characters, a return-value of 16 characters; but in fact "4198721987" is stored as an integer or long-value, so it is something like 4 characters and shouldn´t return such a long output.

Any hint, where I can find a good algorithm with less waste of bytes?
0
Comment
Question by:spetrowitsch
  • 2
3 Comments
 
LVL 8

Expert Comment

by:mnrz
ID: 18746746
you should not store the output as Integer.
it is wrong,besides, the base 64 encoding will return a string.
0
 

Author Comment

by:spetrowitsch
ID: 18746777
I wanted to say: The value, which I want to encrypt (and later decrypt) is in most cases an integer or long, and shouldn´t result in such long encrypted return-values.
0
 
LVL 8

Accepted Solution

by:
mnrz earned 50 total points
ID: 18746805
ok but each algorithm you use will result unexpected size of characters.
0

Featured Post

Independent Software Vendors: We Want Your Opinion

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

Title # Comments Views Activity
use lov values 2 71
Eclipse Java import and method not resolved 4 73
java mysql insert application 14 41
activeMQ Queue Messages Enqueued and Messages Dequeued 1 25
Java contains several comparison operators (e.g., <, <=, >, >=, ==, !=) that allow you to compare primitive values. However, these operators cannot be used to compare the contents of objects. Interface Comparable is used to allow objects of a cl…
By the end of 1980s, object oriented programming using languages like C++, Simula69 and ObjectPascal gained momentum. It looked like programmers finally found the perfect language. C++ successfully combined the object oriented principles of Simula w…
Viewers learn about the third conditional statement “else if” and use it in an example program. Then additional information about conditional statements is provided, covering the topic thoroughly. Viewers learn about the third conditional statement …
Viewers will learn one way to get user input in Java. Introduce the Scanner object: Declare the variable that stores the user input: An example prompting the user for input: Methods you need to invoke in order to properly get  user input:

685 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question