Я новичок в сфере безопасности и Apache Shiro. Недавно я изучаю Сиро. Насколько я понял, существует два способа хэш-значения с помощью md5, код ниже.Apache Shiro MD5Hash и SimpleHash генерируют разные значения
public static void main(String[] args) {
SecureRandomNumberGenerator generator = new SecureRandomNumberGenerator();
ByteSource nextByteSource = generator.nextBytes();
Md5Hash md5Hash = new Md5Hash("234", ByteSource.Util.bytes(nextByteSource));
int iterations = 2;
md5Hash.setIterations(iterations);
System.out.println("md5hash to hex: "+md5Hash.toHex());
SimpleHash hash = new SimpleHash("md5","234",ByteSource.Util.bytes(nextByteSource),iterations);
System.out.println("simple hash to hex: "+hash.toHex());
}
Оба Md5Hash и SimpleHash используют один и тот же алгоритм, такие же соль, такой же вход и тот же итерацию, но выходы различны:
md5hash to hex: 93a2bb8a10727716085e3ae234a90fc8
simple hash to hex: e691e292d8300f29c6e0c448f1ecba76
Что делает два хэшированных значений различны?
ли изменения 'iterations' сделать что-нибудь? – Ownaginatious
Да. Они возвращают одно и то же значение хэширования, если итерации удаляются (по умолчанию 1). На основе api: hashIterations SimpleHash - количество раз, которое аргумент источника хэшировал для отказоустойчивости атаки. Если для итерации установлено значение 2, я думаю, что алгоритм хеширования выполняется дважды, вход второго источника (источник) - это результат первого раунда, и они используют ту же соль, он должен генерировать одно и то же значение хэширования для второго раунда. Пожалуйста, поправьте меня, если я ошибаюсь. –