Насколько надежен криптографический шифр Java для шифрования данных? - PullRequest
0 голосов
/ 15 октября 2018

Я пытаюсь изучить Java Cipher Crypto, и у меня есть несколько вопросов о моем коде ниже:

  public class Main2 {

    public static void main(String[] args) {

        Cipher cipher;
        KeyGenerator keyGenerator;

        SecureRandom secureRandom;
        int keyBitSize = 128;
        SecretKey secretKey;

        byte[] plainText, plainText2;
        byte[] cipherText, cipherText2;

        try 
        {
            cipher = Cipher.getInstance("AES/CBC/PKCS5Padding");
            keyGenerator = KeyGenerator.getInstance("AES");

            secureRandom = new SecureRandom();          
            keyGenerator.init(keyBitSize, secureRandom);

            secretKey = keyGenerator.generateKey();

            try 
            {
                //pass secretKey to cipher.init()
                cipher.init(Cipher.ENCRYPT_MODE, secretKey);

                try 
                {
                    plainText = "helloWorld".getBytes("UTF-8");
                    plainText2 = "helloWorld".getBytes("UTF-8");

                    cipherText = cipher.doFinal(plainText);
                    cipherText2 = cipher.doFinal(plainText2);

                    System.out.println(cipherText + "\n" + cipherText2);
                }

                catch (IllegalBlockSizeException e) 
                {
                    e.printStackTrace();
                } 

                catch (BadPaddingException e) 
                {
                    e.printStackTrace();
                }

                catch (UnsupportedEncodingException e) 
                {
                    e.printStackTrace();
                }                
            } 

            catch (InvalidKeyException e) 
            {
                e.printStackTrace();
            }
        } 

        catch (NoSuchAlgorithmException e) 
        {       
            e.printStackTrace();
        } 

        catch (NoSuchPaddingException e) 
        {
            e.printStackTrace();
        }

    }

}
  1. Почему возникает исключение недействительного ключа (неверный размер ключа) когда keyBitSize установлен на 256?Ограничен ли шифр 128 битами?

  2. Всегда ли этот метод шифрования генерирует согласованную длину зашифрованной строки, равную 11 (при значении keyBitSize = 128)?

  3. Обрезает ли этот метод какую-либо строку ввода открытого текста большей длины?

  4. Будет ли шифрование ввода пользователя с использованием этого метода перед сохранением зашифрованных значений в базе данных MySQL надежной формой безопасности?

1 Ответ

0 голосов
/ 15 октября 2018

Почему возникает недопустимое исключение ключа (недопустимый размер ключа), когда для keyBitSize установлено значение 256?Ограничен ли шифр 128 битами?

Если вы используете OracleJDK, вам нужны библиотеки JCE Unlimited Strength (как прокомментировано).Да, в папку jre / lib / security

Всегда ли этот метод шифрования генерирует согласованную длину зашифрованной строки 11 (если установлено значение keyBitSize = 128)?Обрезает ли этот метод какую-либо строку ввода открытого текста большей длины?

Вы печатаете ссылки на байтовые массивы, а не любые зашифрованные значения.Результатом шифрования является байтовый массив, и вы должны закодировать массив в печатные символы (хорошая практика - base64 или hex)

Вы можете посмотреть в моем блоге для некоторых примеров.

Будет ли шифрование ввода пользователя с использованием этого метода перед сохранением зашифрованных значений в базе данных MySQL надежной формой безопасности?

Вовсе нет.Это не имеет ничего общего с шифрованием, это способ, которым вы его используете.

Когда дело доходит до учетных данных аутентификации пользователя, никогда не хранит пароли пользователей , даже в зашифрованном виде.Тогда в принципе пароль пользователя является обратимым.Об этом много статей, например https://www.google.be/amp/s/nakedsecurity.sophos.com/2013/11/20/serious-security-how-to-store-your-users-passwords-safely/amp/

На сегодняшний день рекомендуется хранить аутентификационные данные с использованием соленого медленного хэша (pbkdf2, ...)

...