Проверьте пароль перед расшифровкой - PullRequest
2 голосов
/ 13 марта 2012

Я хочу расшифровать строку, которая работает с правильным паролем.Я пытался проверить пароль с помощью if(decrypt(Password, encryptedKey).contains(Key)){. Но если PW неверен, я получаю следующее исключение:

javax.crypto.BadPaddingException: pad block corrupted

Так есть ли другой способ проверить пароль?

    public static String decrypt(String seed, String encrypted) throws Exception {
    byte[] rawKey = getRawKey(seed.getBytes());
    byte[] enc = toByte(encrypted);

    SecretKeySpec Spec = new SecretKeySpec(rawKey, "AES");
    Cipher cipher = Cipher.getInstance("AES");
    cipher.init(Cipher.DECRYPT_MODE, Spec);


    byte[] result = cipher.doFinal(enc);

    return new String(result);
}

Ответы [ 2 ]

2 голосов
/ 13 марта 2012

Хорошо, если он не расшифрует (и выдаст исключение) с использованием неверного пароля, но расшифрует с использованием правильного пароля, в чем проблема?Нет (или, по крайней мере, не должно быть ) более простого способа проверки пароля, чем собственно дешифрование: наличие ярлыка обеспечивает слабое место, на которое может напасть злоумышленник («зачем пробовать каждый извозможные пароли, когда есть подсказка пароля под ковриком? ").

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

Это может быть неоптимально стилистически (как в случае «только использования исключений для исключительных состояний»), но не снизит безопасность вашей системы, например, хранение пароля вместе сданные (хеширование пароля перед хранением помогает немного , но ошибиться легко, и это все еще увеличивает сложность системы при одновременном снижении ее безопасности - см., например, this связанных сложностей).

2 голосов
/ 13 марта 2012

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

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