92 lines
2.9 KiB
Java
92 lines
2.9 KiB
Java
package com.herbron.moodl.DataManagers;
|
|
|
|
import android.content.Context;
|
|
import android.util.Log;
|
|
|
|
import com.herbron.moodl.R;
|
|
import android.util.Base64;
|
|
|
|
import java.io.UnsupportedEncodingException;
|
|
import java.nio.charset.StandardCharsets;
|
|
import java.security.InvalidAlgorithmParameterException;
|
|
import java.security.InvalidKeyException;
|
|
import java.security.Key;
|
|
import java.security.NoSuchAlgorithmException;
|
|
|
|
import javax.crypto.BadPaddingException;
|
|
import javax.crypto.Cipher;
|
|
import javax.crypto.IllegalBlockSizeException;
|
|
import javax.crypto.NoSuchPaddingException;
|
|
import javax.crypto.spec.IvParameterSpec;
|
|
import javax.crypto.spec.SecretKeySpec;
|
|
|
|
|
|
public class DataCrypter {
|
|
|
|
private static Key aesKey;
|
|
|
|
public static void updateKey(String key)
|
|
{
|
|
try {
|
|
byte[] keyByte = key.getBytes("UTF-8");
|
|
byte[] finalKey = new byte[32];
|
|
System.arraycopy(keyByte, 0, finalKey, 0, keyByte.length);
|
|
|
|
aesKey = new SecretKeySpec(finalKey, "AES");
|
|
} catch (UnsupportedEncodingException e) {
|
|
Log.d("moodl", "Error while creating encryption key " + e.getMessage());
|
|
}
|
|
}
|
|
|
|
public static String encrypt(Context context, String data)
|
|
{
|
|
String encryptedData = null;
|
|
|
|
try {
|
|
|
|
IvParameterSpec ivParameterSpec = new IvParameterSpec(context.getString(R.string.ivKey).getBytes("UTF-8"));
|
|
|
|
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
|
|
cipher.init(Cipher.ENCRYPT_MODE, aesKey, ivParameterSpec);
|
|
|
|
byte[] encryptedBytes = cipher.doFinal(data.getBytes("UTF-8"));
|
|
|
|
encryptedData = Base64.encodeToString(encryptedBytes, Base64.DEFAULT);
|
|
|
|
} catch (NoSuchPaddingException | NoSuchAlgorithmException
|
|
| InvalidKeyException | BadPaddingException
|
|
| IllegalBlockSizeException | UnsupportedEncodingException
|
|
| InvalidAlgorithmParameterException e) {
|
|
|
|
Log.d("moodl", "Error while encrypting data " + e.getMessage());
|
|
|
|
}
|
|
|
|
return encryptedData;
|
|
}
|
|
|
|
public static String decrypt(Context context, String data)
|
|
{
|
|
String decryptedData = null;
|
|
|
|
try {
|
|
IvParameterSpec ivParameterSpec = new IvParameterSpec(context.getString(R.string.ivKey).getBytes("UTF-8"));
|
|
|
|
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5PADDING");
|
|
cipher.init(Cipher.DECRYPT_MODE, aesKey, ivParameterSpec);
|
|
|
|
byte[] decryptedBytes = cipher.doFinal(data.getBytes("UTF-8"));
|
|
|
|
//byte[] dataBytes = Base64.decode(data, Base64.DEFAULT);
|
|
decryptedData = new String(decryptedBytes, StandardCharsets.UTF_8);
|
|
|
|
} catch(NoSuchPaddingException | NoSuchAlgorithmException
|
|
| InvalidKeyException | UnsupportedEncodingException
|
|
| InvalidAlgorithmParameterException e) {
|
|
e.printStackTrace();
|
|
}
|
|
|
|
return decryptedData;
|
|
}
|
|
}
|