Возможность расшифровать зашифрованный текст в Java несмотря на изменение зашифрованного текста - PullRequest
0 голосов
/ 10 апреля 2020

У меня есть следующий код:

public static void main(final String[] args) throws Exception {
        try {
            String textToEncrypt = "{asdfsad asdf;ls kasdf asdlfjaslfjalksdfjlkadsjflkasfjl;kasj alkdfjaslkfj \r\n" +
                    "asdfjl;asdfjlasdjfdasfjfdosafjadsf \r\n" +
                    "as;ldfjal;ksfjlkdasfjadsf" +
                    "a;ldfjal;ksfjds" +
                    "}";
            String secret = "SOME_SECRET";

        String escapedTextToEncrypt = StringEscapeUtils.escapeJava(textToEncrypt);
        System.out.println(escapedTextToEncrypt);

        String encryptedText = SomeEncryption.encrypt(escapedTextToEncrypt, secret);

        encryptedText = encryptedText.concat("3asdasfd");  // CHANGING THE ENCRYPTED TEXT!

            System.out.println("Encrypted Text :" + encryptedText);

            System.out.println("Decrypted Text :" + SomeEncryption.decrypt(encryptedText, secret));  // THIS WORKS!!
        }catch(Throwable t){
            t.printStackTrace();
        }
    }

Я использую алгоритм шифрования AES и apache общий код c. Любопытно, что когда я добавляю строку к зашифрованному тексту, он все еще может расшифровать его без проблем. Я что-то здесь упускаю?

Подробнее:

SecretKeyFactory factory = SecretKeyFactory.getInstance("PBKDF2withHmacSHA1");
SecretKeySpec secret = new SecretKeySpec(secretKey.getEncoded(), "AES");
Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");

РЕДАКТИРОВАТЬ:

Я использую StringEscapeUtils из apache commons lang library.

1 Ответ

0 голосов
/ 10 апреля 2020

Мы нашли ответ на этот вопрос. Если я добавлю какую-либо строку в конец зашифрованной строки, то это сработает. Но если он будет вставлен в середину, произойдет сбой.

encryptedText = new StringBuilder(encryptedText).insert(0, "xyz").toString();

Вышеприведенный сбой.

...