security
Symmetric encryption example
With this example we are going to demonstrate how to make a symmetric encryption and decryption. In symmetric encryption the same key is used for both encryption of plaintext and decryption of ciphertext. In short, to make a symmetric encryption you should:
- Create a byte array from the initial password and a byte array from the initial key.
- Create a new SecretKeySpec from the key byte array, using the AES algorithm.
- Create a new Cipher for the AES/ECB/NoPadding transformation and initialize it in
encryption mode, with the specified key, using thegetInstance(String transformation)
andinit(int opmode, Key key)
API methods. - Make the encryption, with the
update(byte[] input, int inputOffset, int inputLen, byte[] output, int outputOffset)
anddoFinal(byte[] output, int outputOffset)
API methods. The result is a new byte array with the encrypted password. - Initialize the cipher in decryption mode, using the same key.
- Make the decryption of the encrypted byte array. The result will be a decrypted byte array,
as shown in the code snippet below.
01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 | package com.javacodegeeks.snippets.core; import java.security.Security; import javax.crypto.Cipher; import javax.crypto.spec.SecretKeySpec; public class Main { public static void main(String[] args) throws Exception { Security.addProvider( new org.bouncycastle.jce.provider.BouncyCastleProvider()); byte [] password = "JavaJavaJavaJava" .getBytes( "UTF-8" ); byte [] pkey = "keykeykekeykeykekeykeykekeykeyke" .getBytes( "UTF-8" ); SecretKeySpec secretKey = new SecretKeySpec(pkey, "AES" ); Cipher c = Cipher.getInstance( "AES/ECB/NoPadding" ); System.out.println( "User password(plaintext) : " + new String(password)); // encrypt password byte [] cText = new byte [password.length]; c.init(Cipher.ENCRYPT_MODE, secretKey); int ctLen = c.update(password, 0 , password.length, cText, 0 ); ctLen += c.doFinal(cText, ctLen); System.out.println( "Password encrypted: " + cText.toString().getBytes( "UTF-8" ).toString() + " bytes: " + ctLen); // decrypt password byte [] plainText = new byte [ctLen]; c.init(Cipher.DECRYPT_MODE, secretKey); int plen = c.update(cText, 0 , ctLen, plainText, 0 ); plen += c.doFinal(plainText, plen); System.out.println( "User password(plaintext) : " + new String(plainText) + " bytes: " + plen); } } |
Output:
User password(plaintext) : JavaJavaJavaJava
Password encrypted: [B@64b045f4 bytes: 16
User password(plaintext) : JavaJavaJavaJava bytes: 16
This was an example of how to make symmetric encryption in Java.