Trying to perform AES encryption with a 256 bit key triggers an error. A portable solution is to use BouncyCastle's library instead:
<dependency> <groupId>org.bouncycastle</groupId> <artifactId>bcprov-jdk16</artifactId> <version>1.46</version> </dependency>
public class AESBouncyCastle { private final BlockCipher AESCipher = new AESEngine(); private PaddedBufferedBlockCipher pbbc; private KeyParameter key; public void setPadding(BlockCipherPadding bcp) { this.pbbc = new PaddedBufferedBlockCipher(AESCipher, bcp); } public void setKey(byte[] key) { this.key = new KeyParameter(key); } public byte[] encrypt(byte[] input) throws DataLengthException, InvalidCipherTextException { return processing(input, true); } public byte[] decrypt(byte[] input) throws DataLengthException, InvalidCipherTextException { return processing(input, false); } private byte[] processing(byte[] input, boolean encrypt) throws DataLengthException, InvalidCipherTextException { pbbc.init(encrypt, key); byte[] output = new byte[pbbc.getOutputSize(input.length)]; int bytesWrittenOut = pbbc.processBytes( input, 0, input.length, output, 0); pbbc.doFinal(output, bytesWrittenOut); return output; } }
KeyGenerator kg = KeyGenerator.getInstance("AES"); kg.init(256); SecretKey sk = kg.generateKey(); AESBouncyCastle abc = new AESBouncyCastle(); abc.setPadding(new PKCS7Padding()); abc.setKey(sk.getEncoded()); String secret = "This is a secret message!"; System.out.println(secret); byte[] ba = secret.getBytes("UTF-8"); byte[] encr = abc.encrypt(ba); System.out.println("Encrypted : " + Hex.encodeHexString(encr)); byte[] retr = abc.decrypt(encr); if ( retr.length == ba.length ) { ba = retr; } else { System.arraycopy(retr, 0, ba, 0, ba.length); } String decrypted = new String(ba, "UTF-8"); System.out.println(decrypted);
After retrieving the decrypted byte array, we check for its length, because AES operates with blocks of bytes. The original message length may not be a multiple of these block length.
The generated output is:
This is a secret message! Encrypted : 6d204e3e52daee09800ba6fd9080653dad04a3d4725f3502b78a89b2150e1f63 This is a secret message!
Hi,
ReplyDeleteIs there any sample Java code that does AES encryption/decryption exactly like this website?
http://www.everpassword.com/aes-encryptor
Thanks.
Well, this example does... you just need to feed your own key instead of generating a key!
Delete