· 7 years ago · Nov 07, 2018, 08:04 PM
1package com.example.s407330.myapplication;
2
3import javax.crypto.Cipher;
4import javax.crypto.spec.SecretKeySpec;
5
6public class Encrypter {
7
8 private static final String ENCRYPTING_ALGORITHM = "AES/CTR/NoPadding";
9
10 private final KeyGenerator _keyGenerator;
11
12 public Encrypter(KeyGenerator keyGenerator){
13 _keyGenerator = keyGenerator;
14 }
15
16 public String encrypt(String password, String valueToEncrypt) throws Exception {
17
18 // Generate secret key.
19 SecretKeySpec secretKey = _keyGenerator.generateKey(password, ENCRYPTING_ALGORITHM);
20
21 // Initialize cipher.
22 Cipher cipher = Cipher.getInstance(ENCRYPTING_ALGORITHM);
23
24 // Set-up encryption mode with secret key.
25 cipher.init(Cipher.ENCRYPT_MODE, secretKey);
26
27 // Encode string value with particular charset.
28 byte[] byteText = valueToEncrypt.getBytes();
29
30 // Encrypt.
31 byte[] cipherByteText = cipher.doFinal(byteText);
32
33 // Construct new String instance with proper Charset.
34 return new String(cipherByteText);
35 }
36
37 public String decrypt(String password, String encryptedValue) throws Exception {
38
39 // Generate secret key.
40 SecretKeySpec secretKey = _keyGenerator.generateKey(password, ENCRYPTING_ALGORITHM);
41
42 // Initialize cipher.
43 Cipher cipher = Cipher.getInstance(ENCRYPTING_ALGORITHM);
44
45 // Set-up decryption mode with secret key.
46 cipher.init(Cipher.DECRYPT_MODE, secretKey);
47
48 byte[] cipherByteText = encryptedValue.getBytes();
49
50 // Decrypt.
51 byte[] byteText = cipher.doFinal(cipherByteText);
52
53 // Construct new String instance with proper Charset.
54 return new String(byteText);
55 }
56}