2016-05-17 4 views
0

Я новичок в сфере безопасности и 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 

Что делает два хэшированных значений различны?

+0

ли изменения 'iterations' сделать что-нибудь? – Ownaginatious

+1

Да. Они возвращают одно и то же значение хэширования, если итерации удаляются (по умолчанию 1). На основе api: hashIterations SimpleHash - количество раз, которое аргумент источника хэшировал для отказоустойчивости атаки. Если для итерации установлено значение 2, я думаю, что алгоритм хеширования выполняется дважды, вход второго источника (источник) - это результат первого раунда, и они используют ту же соль, он должен генерировать одно и то же значение хэширования для второго раунда. Пожалуйста, поправьте меня, если я ошибаюсь. –

ответ

0

md5Hash вы создаете, с только на итерации, а через SimpleHash его 2 итерации, так что изменение должно быть:

public static void main(String[] args) { 
int iterations = 2;  

SecureRandomNumberGenerator generator = new SecureRandomNumberGenerator(); 
     ByteSource nextByteSource = generator.nextBytes(); 
     Md5Hash md5Hash = new Md5Hash("234", ByteSource.Util.bytes(nextByteSource),iterations); 


     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()); 
    } 

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

  • Нет связанных вопросов^_^