Как использовать Cipher без IV (Вектор инициализации) - PullRequest
0 голосов
/ 22 марта 2020

Я пытаюсь зашифровать / расшифровать некоторые строковые данные. Я использую Cipher. Мне было интересно, если необходимо использовать IV для шифрования данных. Если вы можете использовать Cipher без IV, то как это сделать?

Я получил некоторый код здесь: Вот код для шифрования данных:

fun encrypt(cipher: Cipher, plainText: ByteArray): String {
    val enc = cipher.doFinal(plainText)
    return Base64.encodeToString(
            enc,
            Base64.DEFAULT
    ) + separator + Base64.encodeToString(
            cipher.iv,
            Base64.DEFAULT
    )


}

А вот код для расшифровки:

fun decrypt(cipher: Cipher, encrypted: String): String {

    return cipher.doFinal(
            Base64.decode(
                    encrypted,
                    Base64.DEFAULT
            )
    ).toString(Charsets.UTF_8)
}

Инициализация дешифрования:

cipherDec.init(
                Cipher.DECRYPT_MODE, key, IvParameterSpec(
                    Base64.decode(
                        IV.toByteArray(Charsets.UTF_8),
                        Base64.DEFAULT
                    )
                )

Инициализация шифрования:

 cipherEnc.init(Cipher.ENCRYPT_MODE, key)

1 Ответ

1 голос
/ 22 марта 2020

Прежде всего, вы не можете просто не использовать IV (вектор инициализации), поскольку шифры, работающие в более сильных режимах, всегда рассчитаны на их использование. Целью IV является создание разных шифротекстов для одних и тех же открытых текстов. Обычный подход состоит в том, чтобы использовать сильный генератор случайных чисел, чтобы получить столько байтов IV, сколько необходимо, чем прикрепить IV к зашифрованному тексту (обычно перед ним), а затем использовать IV для расшифровки. Да, IV не нужно шифровать или скрывать. Он просто должен быть там.

Так что, если вы не хотите или не нуждаетесь в IV (вам может не понадобиться IV, если каждый открытый текст различен из-за домена открытого текста или деловой необходимости). Вы можете использовать постоянное значение для IV (как массив нулевых байтов). Тогда вам не нужно будет прикреплять IV к зашифрованному тексту. Но обратите внимание - не делайте этого, если вы точно не знаете, что делаете . Вместо этого используйте случайный IV.

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