/ Java AES декриптиране с грешен ключ - java, криптиране, AES, badpaddingexception

Java AES декриптиране с грешен ключ - java, криптиране, AES, badpaddingexception

Написах просто криптиране и декриптиране на Java AES, както е описано по-долу (за целите на обучението):

//Encryption
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5Padding");
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
cipher.init(Cipher.ENCRYPT_MODE, secretKey);
String encryptedString = Base64.encodeBase64String(cipher.doFinal(strToEncrypt.getBytes()));
return encryptedString;

//Decryption
Cipher cipher = Cipher.getInstance("AES/ECB/PKCS5PADDING");
SecretKeySpec secretKey = new SecretKeySpec(key, "AES");
cipher.init(Cipher.DECRYPT_MODE, secretKey);
String decryptedString = new String(cipher.doFinal(Base64.decodeBase64(strToDecrypt)));
return decryptedString;

Ключът за шифроване е низ с променлива дължина, а MD5 разполага с низа, за да получите 128-битовия ключ.

Мога успешно да шифровам и decrpyt на данните, използвайки същия ключ. Но ако дешифрирам данните с грешен ключ, имам изключение по-долу:

javax.crypto.BadPaddingException: Given final block not properly padded

Всъщност това, което очаквам, е грешен байт, произведенот неправилно ключ-декриптиране, но не и изключение, изхвърлено като по-горе, защото ако се създадат погрешни байтове, хакерът може да не знае дали декриптирането е правилно или не. При изключение, хвърлен като по-горе, изходът от грубата сила ще стане по-лесно да се определи.

И така, какво се случва с моя код?

Редактиране:

Мисля, че направих грешка тук. Хакерът може да не използва моята програма за декриптиране. Така че за AES, ако човек декриптира не успее, той ще разбере, че декриптирането е неуспешно, но не, както мислех, че да се разбират байтове от дешифриране? Това е ужасно...

Отговори:

5 за отговор № 1

Няма нищо лошо във вашия код (въпреки чеможете да го направите по-стабилна, като зададете кодиране на трансформациите между знаците и байтовете, а по-скоро да разчитате на кодирането на платформата). Подложката има определен формат, така че да може да се премахне след декриптиране. Когато декриптирате с грешен ключ, подложката също е изкривена и не може да бъде премахната. Това причинява изключение.

В повечето случаи нападателят ще знае, че имаимам грешен ключ не само поради подложката. Байтовете за данни обикновено имат и някаква структура (например определен файлов формат), или в теб ще открие необичайни символи или невалидно кодиране на знаци. Ако вземете utf-8 например, не всеки бинарен низ е валидно utf-8 кодиране.