2016-05-17 9 views
0

Ich bin neu in Sicherheit und Apache Shiro. Ich lerne Shiro vor kurzem. Soweit ich gelernt habe gibt es zwei Möglichkeiten, einen Wert zu hacken, indem Sie MD5 verwenden, der Code ist unten.Apache Shiro MD5Hash und SimpleHash generieren unterschiedliche Werte

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

Beide md5hash und SimpleHash verwenden den gleichen Algorithmus, gleiche Salz, gleiche Eingangs und gleiche Iterationen, aber die Ausgänge sind unterschiedlich:

md5hash to hex: 93a2bb8a10727716085e3ae234a90fc8 
simple hash to hex: e691e292d8300f29c6e0c448f1ecba76 

Was die zwei-Hash-Werte von anderen unterscheidet?

+0

hat die Änderung 'iterations' etwas tun? – Ownaginatious

+1

Ja. Sie geben beide den gleichen Hashwert zurück, wenn die Iterationen entfernt werden (Standard ist 1). Basiert auf SimpleHashs api: hashIterations - die Anzahl der Male, die das Quellargument für die Angriffsresistenz verwendet hat. Wenn die Iteration auf 2 gesetzt ist, denke ich, dass der Hash-Algorithmus zweimal ausgeführt wird, die Eingabe der zweiten Runde die Ausgabe der ersten Runde ist und sie dasselbe Salz verwenden, es sollte den gleichen Hashwert für die zweite Runde generieren. Bitte korrigieren Sie mich, wenn ich falsch liege. –

Antwort

0

Die md5hash Sie erstellen mit nur auf Iteration, während über SimpleHash seine 2 Iteration so die geändert werden sollte:

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