Utils.kt 2.6 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. package com.fastest.pass.app
  2. import android.util.Base64
  3. import java.security.MessageDigest
  4. import javax.crypto.Cipher
  5. import javax.crypto.KeyGenerator
  6. import javax.crypto.SecretKey
  7. import javax.crypto.spec.IvParameterSpec
  8. import javax.crypto.spec.SecretKeySpec
  9. class Utils {
  10. companion object {
  11. fun hashing_sha256(text: String): String {
  12. val bytes = MessageDigest.getInstance("SHA-256").digest(text.toByteArray())
  13. return bytes.joinToString("") { "%02x".format(it) }
  14. }
  15. fun sha256(input: String): String {
  16. val bytes = MessageDigest.getInstance("SHA-256").digest(input.toByteArray())
  17. return bytes.joinToString("") { "%02x".format(it) }
  18. }
  19. fun generateKey() : SecretKey {
  20. val keyGen = KeyGenerator.getInstance("AES")
  21. keyGen.init(256)
  22. return keyGen.generateKey()
  23. }
  24. fun encryptData(
  25. data: String,
  26. secretKeyString: String,
  27. ivString: String,
  28. saltString: String
  29. ) : Pair<String, String> {
  30. val ivKey: IvParameterSpec = IvParameterSpec(ivString.toByteArray(Charsets.UTF_8))
  31. val secKey: SecretKey = SecretKeySpec(secretKeyString.toByteArray(Charsets.UTF_8), "AES")
  32. val encryptionWithSalt = saltString.toByteArray(Charsets.UTF_8) + data.toByteArray(Charsets.UTF_8)
  33. val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
  34. cipher.init(Cipher.ENCRYPT_MODE, secKey, ivKey)
  35. val encryptedData = cipher.doFinal(data.toByteArray())
  36. // val encryptedData = cipher.doFinal(data.toByteArray())
  37. val ivBase64 = Base64.encodeToString(ivString.toByteArray(Charsets.UTF_8), Base64.DEFAULT)
  38. val encryptedDataBase64 = Base64.encodeToString(encryptedData, Base64.DEFAULT)
  39. return Pair(ivBase64, encryptedDataBase64)
  40. }
  41. fun decryptData(ivBase64: String, encryptedBase64: String, secretKeyString: String) : String {
  42. val iv = Base64.decode(ivBase64, Base64.DEFAULT)
  43. val encryptedBytes = Base64.decode(encryptedBase64, Base64.DEFAULT)
  44. val ivSpec = IvParameterSpec(iv)
  45. val secKey: SecretKey = SecretKeySpec(secretKeyString.toByteArray(Charsets.UTF_8), "AES")
  46. val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
  47. cipher.init(Cipher.DECRYPT_MODE, secKey, ivSpec)
  48. val decryptedData = cipher.doFinal(encryptedBytes)
  49. val decryptedString = String(decryptedData, Charsets.UTF_8)
  50. return decryptedString
  51. }
  52. }
  53. }