Как расшифровать текст в kotlin, зашифровать в nodejs? - PullRequest
0 голосов
/ 11 марта 2020

Я пытаюсь расшифровать текст, зашифрованный с помощью nodejs. Проще говоря, я пытаюсь зашифровать данные со стороны сервера и расшифровать их на стороне клиента при каждом вызове API.

Вот мой код на стороне сервера.

function encrpt(text) {
    const seckey = '12345678123456781234567812345678';

    var aesDec = crypto.createCipheriv("aes-256-ecb", seckey , '');
    var output = aesDec.update(text, 'utf8', 'hex');
    output += aesDec.final('hex');

    return output;
}

Это код, который я использую для расшифровки на стороне клиента, он находится в Kotlin.

fun String.test() {
    val skc = SecretKeySpec("12345678123456781234567812345678".toByteArray(Charsets.UTF_8), "AES")

    val cipher = Cipher.getInstance("AES/ECB/PKCS5Padding")
    cipher.init(Cipher.DECRYPT_MODE, skc)
    val result = cipher.doFinal(this.toByteArray())

    println(result.toString())
}   

Но при этом я получаю javax.crypto.BadPaddingException: error:1e000065:Cipher functions:OPENSSL_internal:BAD_DECRYPT в android studio.

1 Ответ

0 голосов
/ 11 марта 2020

Вы можете использовать вот так:

init{
   cipher = Cipher.getInstance("AES/CBC/PKCS5Padding")
   secretKeySpec = SecretKeySpec(secret.toByteArray(Charsets.UTF_8),"AES")
    }


fun decrypt(cipheredText: String?): String? {

            val array: ByteArray = Base64.decode(cipheredText, Base64.DEFAULT)
            val encrypted: ByteArray = array.copyOfRange(0, array.size)
            cipher!!.init(
                Cipher.DECRYPT_MODE,
                secretKeySpec,
                IvParameterSpec(iv.toByteArray())
            )
            return String(cipher!!.doFinal(encrypted)).trim()
        }

Примечание: iv должно быть 16 байт (128 бит)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...