From b554f64b51dbc5f087035c7c425b8fb4ed2f0846 Mon Sep 17 00:00:00 2001 From: sanjay Date: Thu, 7 Mar 2024 09:55:56 +0530 Subject: [PATCH] setting up encryption --- .../hpostesting/encryption/Encryption.kt | 42 +++++++++++++++++++ .../DeviceProvisionFragment.kt | 5 +++ 2 files changed, 47 insertions(+) create mode 100644 app/src/main/java/com/example/hpostesting/encryption/Encryption.kt diff --git a/app/src/main/java/com/example/hpostesting/encryption/Encryption.kt b/app/src/main/java/com/example/hpostesting/encryption/Encryption.kt new file mode 100644 index 0000000..27e1f46 --- /dev/null +++ b/app/src/main/java/com/example/hpostesting/encryption/Encryption.kt @@ -0,0 +1,42 @@ +package com.example.hpostesting.encryption + +import android.util.Base64 +import javax.crypto.Cipher +import javax.crypto.SecretKeyFactory +import javax.crypto.spec.IvParameterSpec +import javax.crypto.spec.PBEKeySpec +import javax.crypto.spec.SecretKeySpec + +object Encryption { + private const val AES_MODE = "AES/CBC/PKCS5Padding" + private const val KEY_SPEC_ALGORITHM = "PBKDF2WithHmacSHA1" + private const val SALT = "Bigtec" + private const val ITERATION_COUNT = 10000 + private const val KEY_LENGTH = 256 + private val FIXED_IV = byteArrayOf(0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15) + + fun encrypt(textToEncrypt: String, password: String): String { + val salt = SALT.toByteArray() + val factory = SecretKeyFactory.getInstance(KEY_SPEC_ALGORITHM) + val spec = PBEKeySpec(password.toCharArray(), salt, ITERATION_COUNT, KEY_LENGTH) + val tmp = factory.generateSecret(spec) + val key = SecretKeySpec(tmp.encoded, "AES") + val cipher = Cipher.getInstance(AES_MODE) + cipher.init(Cipher.ENCRYPT_MODE, key, IvParameterSpec(FIXED_IV)) + val encryptedBytes = cipher.doFinal(textToEncrypt.toByteArray(Charsets.UTF_8)) + return Base64.encodeToString(encryptedBytes, Base64.NO_WRAP) + } + + fun decrypt(encryptedText: String, password: String): String { + val salt = SALT.toByteArray() + val encryptedBytes = Base64.decode(encryptedText, Base64.NO_WRAP) + val factory = SecretKeyFactory.getInstance(KEY_SPEC_ALGORITHM) + val spec = PBEKeySpec(password.toCharArray(), salt, ITERATION_COUNT, KEY_LENGTH) + val tmp = factory.generateSecret(spec) + val key = SecretKeySpec(tmp.encoded, "AES") + val cipher = Cipher.getInstance(AES_MODE) + cipher.init(Cipher.DECRYPT_MODE, key, IvParameterSpec(FIXED_IV)) + val decryptedBytes = cipher.doFinal(encryptedBytes) + return String(decryptedBytes, Charsets.UTF_8) + } +} diff --git a/app/src/main/java/com/example/hpostesting/presentation/deviceprovision/DeviceProvisionFragment.kt b/app/src/main/java/com/example/hpostesting/presentation/deviceprovision/DeviceProvisionFragment.kt index 10d34eb..8100091 100644 --- a/app/src/main/java/com/example/hpostesting/presentation/deviceprovision/DeviceProvisionFragment.kt +++ b/app/src/main/java/com/example/hpostesting/presentation/deviceprovision/DeviceProvisionFragment.kt @@ -221,4 +221,9 @@ class DeviceProvisionFragment : Fragment() { } } } + + private fun encryptAndSaveToFile(){ + + } + } \ No newline at end of file