2015-09-17 2 views
1

Я использую реализацию Java для BCrypt, и я хочу проверить, была ли строка уже удалена с помощью BCrypt. Возможно ли это?Проверьте, не была ли строка помечена с помощью BCrypt или нет.

Я ничего не смог найти. Она будет работать как этот

if (!BCrypt.hasBeenHashed(myString)) { 
    return BCrypt.hashpw(myString, salt); 
} 

// BCrypt.hasBeenHashed("my-new-password") > FALSE 
// BCrypt.hasBeenHashed("$fdshjkfhdsfhdjkshfjdhfjd") > TRUE 

Идея заключается в том, что у меня есть автоматический метод, который хэширует некоторые строки при создании. Когда я обновляю объект, я хочу, чтобы он hash только «новые значения».

Спасибо.

+1

Нет. Для этого нет механизма. –

+0

Я думаю, вам нужно будет хранить информацию «has hashed» для каждой строки в другом месте, например. в какой-то «карте». Знак '$' в 'myString.charAt (0)' был бы единственным другим способом, о котором я мог думать, но это не очень надежно, так как ваши входные строки могут содержать что угодно (и начинаться с '$'). – Hexaholic

ответ

0

Вы можете прочитать длину. Все хэши точно такие же, при условии, что используется тот же алгоритм. 22 или 32 или 53 в зависимости от вашей реализации. Если в Java 53 используется. Чтобы сделать это более надежным, вы также можете обнаружить, что первый символ равен $, а целая строка должна быть 53 символа. Позиции 3 и 6 также содержат $. Существуют и другие факторы, которые могут быть проверены, например, одинаковый коэффициент работы. Это представлено позицией 1 и 2 комбинацией всего этого и проверки, чтобы убедиться, что пользователь не вводит что-то подобное. Если это нецелесообразно, создавая экземпляр boolean, для которого задано значение true, когда пароль хэшируется, но требует, чтобы каждый пароль был его собственным объектом.

+0

Да, я подумал об этом, но, как сказал @Hexaholic, это не на 100% уверен, так как пользователь может иметь пароль, который соответствует именно этим требованиям. – c4k

Смежные вопросы