In this guide, you will learn about the Cipher doFinal() method in Java programming and how to use it with an example.
1. Cipher doFinal() Method Overview
Definition:
The doFinal() method of the Cipher class in Java is used to perform the final encryption or decryption operation, depending on how the Cipher object has been initialized. It takes as input a byte array, processes it, and returns a new byte array containing the result.
Syntax:
public byte[] doFinal(byte[] input) throws IllegalBlockSizeException, BadPaddingException
Parameters:
- input: a byte array containing the input data to be processed.
Key Points:
- The doFinal() method can throw an IllegalBlockSizeException if the input data's length is incorrect.
- It can also throw a BadPaddingException if the padding of the input data is incorrect.
- Before calling doFinal(), the Cipher object must be properly initialized for encryption or decryption.
2. Cipher doFinal() Method Example
import javax.crypto.Cipher;
import javax.crypto.spec.SecretKeySpec;
import java.util.Base64;
public class DoFinalExample {
public static void main(String[] args) {
try {
// Define the transformation
String transformation = "AES/ECB/PKCS5Padding";
// Create a key
SecretKeySpec key = new SecretKeySpec("abcdefghijklmnop".getBytes(), "AES");
// Get Cipher instance and initialize it for encryption
Cipher cipher = Cipher.getInstance(transformation);
cipher.init(Cipher.ENCRYPT_MODE, key);
// Encrypt the data
byte[] encryptedData = cipher.doFinal("Hello, World!".getBytes());
// Encode the encrypted data to Base64
String encodedData = Base64.getEncoder().encodeToString(encryptedData);
// Print the encrypted data
System.out.println("Encrypted Data: " + encodedData);
// Initialize the Cipher for decryption
cipher.init(Cipher.DECRYPT_MODE, key);
// Decode the Base64 encoded data and decrypt it
byte[] decodedData = Base64.getDecoder().decode(encodedData);
byte[] decryptedData = cipher.doFinal(decodedData);
// Convert the decrypted byte array to a String
String originalString = new String(decryptedData);
// Print the original string
System.out.println("Original String: " + originalString);
} catch (Exception e) {
e.printStackTrace();
}
}
}
Output:
Encrypted Data: zQY9zjTZl9yvmDf+KluNUQ== Original String: Hello, World!
Explanation:
In this example, we used the Cipher.getInstance() method to create a Cipher instance for the "AES/ECB/PKCS5Padding" transformation.
We initialized this instance in encryption mode and used doFinal() to encrypt the input string "Hello, World!". The encrypted data was then Base64 encoded and printed.
Subsequently, we reinitialized the Cipher instance in decryption mode and used doFinal() again to decrypt the encrypted data back to the original string, which was then printed, showcasing the symmetry and inverse nature of the encryption and decryption processes.
Comments
Post a Comment
Leave Comment