Hi!
Bin neu hier, also erstmal hallo an alle!
Hoffe es kann kann mir hier wer weiterhelfen.
Mit folgendem versuche ich ein SealedObject mehrmals hintereinander zu verschlüsseln und dann wieder zu entschlüsseln:
Beim entschlüsseln erhalte ich immer eine BadPaddingException die mir sagt "Given final block not properly padded". Ich kann mir nicht erklären, woher der Fehler kommt. Die Schlüssel sind definitiv richtig. Ich habe in irgendwo gelesen, dass das ganze ein Encoding-Problem sein soll, dass auftritt wenn man allzu leichtfertig Strings in byte[] umwandelt.
Kann es sein, dass das ganze in der SealedObject-Klasse falsch implementiert ist oder ist einfach nur irgendwo ein Fehler in meinem Code?
Danke schonmal!
Bin neu hier, also erstmal hallo an alle!
Hoffe es kann kann mir hier wer weiterhelfen.
Mit folgendem versuche ich ein SealedObject mehrmals hintereinander zu verschlüsseln und dann wieder zu entschlüsseln:
PHP:
@Override
public Serializable decryptMessage(Serializable cipherText) throws EncryptionKeyNotInitialisedException, DecryptionFailedException {
if( this.key == null )
throw new EncryptionKeyNotInitialisedException();
if(!( cipherText instanceof SealedObject))
throw new DecryptionFailedException( "message no instance of SealedObject");
SealedObject o = (SealedObject) cipherText;
Cipher cipher = null;
try {
cipher = Cipher.getInstance( "AES" );
} catch (NoSuchAlgorithmException e) { throw new DecryptionFailedException(e);
} catch (NoSuchPaddingException e) { throw new DecryptionFailedException(e);
}
try {
cipher.init( Cipher.DECRYPT_MODE, this.key );
} catch (InvalidKeyException e) { e.getStackTrace(); throw new DecryptionFailedException(e);
}
Serializable plainText = null;
try {
plainText = (Serializable) o.getObject(cipher);
} catch (IllegalBlockSizeException e) { throw new DecryptionFailedException(e);
} catch (BadPaddingException e) { throw new DecryptionFailedException(e);
} catch (IOException e) { throw new DecryptionFailedException(e);
} catch (ClassNotFoundException e) {throw new DecryptionFailedException(e);
} catch ( ClassCastException e){ throw new DecryptionFailedException(e); }
return plainText;
}
@Override
public Serializable encryptMessage(Serializable cipherText) throws EncryptionFailedException,
EncryptionKeyNotInitialisedException {
if( this.key == null )
throw new EncryptionKeyNotInitialisedException();
Cipher cipher = null;
try {
cipher = Cipher.getInstance( "AES" );
} catch (NoSuchAlgorithmException e) { throw new EncryptionFailedException( e );
} catch (NoSuchPaddingException e) { throw new EncryptionFailedException( e );
}
try {
cipher.init( Cipher.ENCRYPT_MODE, this.key );
} catch (InvalidKeyException e) { throw new EncryptionFailedException( e );
}
try {
return new SealedObject( cipherText, cipher );
} catch (IllegalBlockSizeException e) { throw new EncryptionFailedException(e);
} catch (IOException e) { throw new EncryptionFailedException(e);
}
}
Beim entschlüsseln erhalte ich immer eine BadPaddingException die mir sagt "Given final block not properly padded". Ich kann mir nicht erklären, woher der Fehler kommt. Die Schlüssel sind definitiv richtig. Ich habe in irgendwo gelesen, dass das ganze ein Encoding-Problem sein soll, dass auftritt wenn man allzu leichtfertig Strings in byte[] umwandelt.
Kann es sein, dass das ganze in der SealedObject-Klasse falsch implementiert ist oder ist einfach nur irgendwo ein Fehler in meinem Code?
Danke schonmal!