Search code examples
javastringencryptionencryption-symmetric

Passing AES symmetric key as string using JAVA


Why does the following test fail?

KeyGenerator generator = KeyGenerator.getInstance("AES");
SecretKey key = generator.generateKey();
byte[] symKey = key.getEncoded();
String keyAsString = new String(symKey, Charset.forName("UTF-8"));
byte[] supposedSymKey = keyAsString.getBytes(Charset.forName("UTF-8"));
Assert.assertEquals(symKey.length, supposedSymKey.length);

And the contents of supposedSymKey and symKey is different? What is the right way to transform the symKey to string, so that i can distribute it? Thanks.


Solution

  • Try base64 encode/decode:

    KeyGenerator    generator       = KeyGenerator.getInstance( "AES" );
    SecretKey       key             = generator.generateKey();
    byte[]          symKey          = key.getEncoded();
    String          buffer          = DatatypeConverter.printBase64Binary( symKey );
    byte[]          supposedSymKey  = DatatypeConverter.parseBase64Binary( buffer );