Как получить такой же зашифрованный текст - PullRequest
0 голосов
/ 11 апреля 2019

У меня есть следующий код, он работает без проблем, но я хочу получить тот же зашифрованный текст. Я думаю, что решение не использует SecureRandom, потому что проблема заключается в том, когда я пытаюсь расшифровать данные в другой момент, чем первое шифрование

Я использую следующее:

  • Android Studio
  • Котлин
  • Java версии 1.8
package com.xxxx

import android.util.Base64
import java.security.SecureRandom
import javax.crypto.Cipher
import javax.crypto.spec.IvParameterSpec
import javax.crypto.spec.SecretKeySpec

class EncryptDecrypt {

    var decrypted = ""
    var encrypted = ""

    fun main(textToWork: String, flag: Boolean) {

        val password = "**hola1234como**"

        val r = SecureRandom()
        r.setSeed(r.generateSeed(16))

        val byteIV = ByteArray(16)
        r.nextBytes(byteIV)

        val encryptText = if(flag) encrypt(textToWork, password, byteIV) else textToWork
        val bytes =  Base64.decode(encryptText, Base64.DEFAULT)
        encrypted = encrypt(textToWork, password, byteIV)
        decrypted = decrypt(bytes, password, byteIV)
    }

    private fun encrypt(plainText: String, password: String, byteIV: ByteArray): String {

        val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
        val key = SecretKeySpec(password.toByteArray(charset("UTF-8")), "AES")

        cipher.init(Cipher.ENCRYPT_MODE, key, IvParameterSpec(byteIV))
        val bytes = cipher.doFinal(plainText.toByteArray(charset("UTF-8")))
        return Base64.encodeToString(bytes, Base64.DEFAULT)
    }

    private fun decrypt(bytes: ByteArray, password: String, byteIV: ByteArray): String {
        val cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
        val key = SecretKeySpec(password.toByteArray(charset("UTF-8")), "AES")

        cipher.init(Cipher.DECRYPT_MODE, key, IvParameterSpec(byteIV))
        return String(cipher.doFinal(bytes))
    }
}
...