Java Как проверить значение уже зашифровано AES; - PullRequest
0 голосов
/ 13 июня 2018

Я создал инструмент для шифрования данных моей таблицы с использованием шифрования AES.

Метод шифрования

public String encrypt(String plainText) throws Exception {

        byte[] cipherBytes = null;

        log.info("Started encryption...");

        System.out.println("value before encryption :" + plainText);

        log.info("value before encryption :" + plainText);

        if (plainText != null && !plainText.isEmpty()) {
            if (cipher != null && key != null) {
                byte[] ivByte = new byte[cipher.getBlockSize()];
                IvParameterSpec ivParamsSpec = new IvParameterSpec(ivByte);
                cipher.init(Cipher.ENCRYPT_MODE, key, ivParamsSpec);
                cipherBytes = cipher.doFinal(plainText.getBytes());
                log.info("Completed encryption.");
                log.info("Encrypted data : " + new String(cipherBytes, "UTF8"));
                System.out.println("value after encryption" + Hex.encodeHexString(cipherBytes));
                log.info("value after encryption" + Hex.encodeHexString(cipherBytes));
                return Hex.encodeHexString(cipherBytes);
            } else {
                log.info("Encryption failed, cipher, key is null.");
                throw new RuntimeException(
                        "Encryption failed, cipher, key  is null.");
            }

        }


        return plainText;


    }
  • input String: JohnDoee
  • зашифрованный вывод: 4aa2173cb653f89e109b23218ecaea7f

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

Ответы [ 2 ]

0 голосов
/ 13 июня 2018

Я согласен с Майклом, что, вероятно, лучше поставить префикс вашего зашифрованного текста каким-нибудь маркером.Но в случае, если вы не можете сделать это, существует также вероятностный подход:

Вы не можете идентифицировать необработанные зашифрованные данные со 100% уверенностью.Но в зависимости от вашего открытого текста вы можете определить, не зашифрован ли он.Например, текст ASCII может быть идентифицирован MSB.Поскольку зашифрованный текст должен быть неотличим от случайного шума, маловероятно, что зашифрованные данные будут иметь один и тот же шаблон.

Если для 10 последовательных байтов MSB установлен в ноль, то вероятность того, что он будет зашифрованным, составляет всего 2 -10 , то есть менее 0,1%.

Но в конце концов вы шифруете зашифрованный текст как шестнадцатеричную строку, так что вам нужно будет обратить это во время анализа.

Если ваш открытый текстОказывается, это сжатые данные, но шансы не так хороши, поскольку энтропия почти одинаково высока, как для зашифрованных или даже случайных данных.

0 голосов
/ 13 июня 2018

После шифрования добавьте префикс, такой как AES:.При дешифровании проверяйте наличие префикса (и, очевидно, удаляйте его).

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

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


Единственный крайний случай, если истинный открытый текст начинается с префикса.Если вы считаете, что это стоит рассмотреть, вы можете уменьшить риск, выбрав маловероятный префикс (возможно, воспользовавшись знанием открытого текста).Для большей уверенности вы можете посмотреть длину ввода, поскольку длина истинного зашифрованного текста гарантированно будет кратна размеру блока.

...