HASH Algorithmus 2 Strings ergeben das Selbe.

Status
Nicht offen für weitere Antworten.

clemix

Neues Mitglied
Ich habe ein Mailprogramm geschrieben, bei dem man die Möglichkeit hat Emails auf dem Server zu belassen und erst zu löschen wenn man diese auch aus der Inbox löscht (aller Thunderbird).
Um Emails eindeutig zu Identifizieren dachte ich mir, ich lese aus dem Header den Wert von "Message-ID" aus und pack noch das Sendedatum hinten drann.
Das Resultat sind dann solche Strings
String s1 = "<000a01c735bc$efdc1450$7790ba5a@portimoni>Thu Jan 11 21:13:15 CET 2007";
String s2 = "<000b01c73da6$36500db0$fe08ba5a@portimoni>Sun Jan 21 22:50:44 CET 2007";
Welche ja Recht Unterschiedlich sind! So damit die überprüfung an Zeit gewinnt und die Länge dieser Strings nicht unnötig meine Datenbank beeinflußt dachte ich mir das ich einen SHA Hash wert drüber bilde und nur noch diesen vergleiche. Das Folgende Programm zeigt genau das. Problem was jetzt entstanden ist, nachdem ich das Programm keinen Monat benutzt habe, das Emails kommen die unterschiedlich sind, aber den selben Hash Wert erzeugen.

Für Lösungen oder Anregungen jeder art bin ich sehr dankbar. Oder vieleicht sollte ich ganz anders die Lokal gepseicherten Emails mit denen auf dem Server vergleichen?!?


Code:
import java.security.MessageDigest;


public class TEST {
	public static final String MD5 = "MD5";
	public static final String SHA = "SHA";
	/**
	 * Gibt den hashwert des übergebenden Strings als Hexstring zurück.
	 * Bekannte Algorithmen sind: 
	 *  * MD5
	 *  * SHA
	 *  
	 * @param txt
	 * @param algo
	 * @return
	 * @throws Exception
	 */
	public static String hashAsString(String txt, String algo) throws Exception{
		return byteArrayToHexString(hash(txt,algo));
	}
	
	/**
	 * Füllt ein String mit Zeichen bis zu einer länge auf.
	 * @param string
	 * @param pattern
	 * @param n
	 * @return
	 * @throws Exception
	 */
	private static String fillWithTo(String string, String pattern , int n) throws Exception{
		int dif = n - string.length();
		if(dif>0){
			for(int i =0; i < dif; i++){
				string += pattern;
			}
		}else if( dif < 0){
			throw new Exception("Differents is "+dif+". But max "+n+" expected. String is: "+string);
		}
		return string;
	}
	
	/**
	 * Konvertiert ein Byte Array welches die werte von 0xff nicht überschreitet in 
	 * ein Hexstring.
	 * @param array
	 * @return
	 */
	public static String byteArrayToHexString(byte[] array){
		StringBuffer sb = new StringBuffer();
		for(int i =0; i < array.length; i++){
			try {
				sb.append(fillWithTo(Integer.toHexString(array[i] & 0xff),"0",2) );
			} catch (Exception e) {
				e.printStackTrace();
			}
		}
		return sb.toString();
	}
	
	/**
	 * Gibt den hashwert des übergebenden Strings als Byte Array zurück.
	 * Bekannte Algorithmen sind:
	 *  * MD5
	 *  * SHA
	 *  
	 * @param txt
	 * @param algo
	 * @return
	 * @throws Exception
	 */
	public static byte[] hash( String txt, String algo ) throws Exception{
		MessageDigest messagedigest = MessageDigest.getInstance( algo );

	    byte md[] = new byte[8192]; 
	    
	    for( int i=0; i< txt.length(); i++ ){
	    	messagedigest.update( md, 0, txt.charAt(i) );
	    }

	    return messagedigest.digest();
	}
	
	/**
	 * @param args
	 */
	public static void main(String[] args) {
		String s1 = "<000a01c735bc$efdc1450$7790ba5a@portimoni>Thu Jan 11 21:13:15 CET 2007";
		String s2 = "<000b01c73da6$36500db0$fe08ba5a@portimoni>Sun Jan 21 22:50:44 CET 2007";
		try{
			byte[] hab1 = hash(s1, SHA);
			byte[] hab2 = hash(s2, SHA);
			
			for (int i = 0; i < hab1.length; i++) {
				System.out.println(hab1[i]+ "  "+hab2[i]);
			}
			
			String ha1 = hashAsString(s1, SHA);
			String ha2 = hashAsString(s2, SHA);
			
			System.out.println("Hash1:"+ha1+"  javaHash:"+ha1.hashCode());
			System.out.println("Hash2:"+ha2+"  javaHash:"+ha2.hashCode());
			
			System.out.println("Hash1 == Hash2 is "+ha1.equals(ha2));
		}catch(Exception ex){
			ex.printStackTrace();
		}

	}

}
:### :### :###
 
B

Beni

Gast
Bei einem Hash verliert man Informationen, das ist ganz normal (ist eigentlich der Trick an einem Hash, darum ist ein Hash kleiner als der Ausgangswert). Den Hash kannst du für eine schnelle "Vorprüfung" nutzen. Aber wenn zwei Hashwerte gleich sind, musst du immer die Ausgangswerte vergleichen, um deren Gleichheit zu bestätigen. Andererseits bedeuten unterschiedliche Hashs immer unterschiedliche Ausgangswerte.
 

clemix

Neues Mitglied
Hm jap. Ich dachte halt nur, da ja mit 160 Bit schon einiges an möglichkeiten vorhaden ist, dass da die Wahrscheinlichkeit einfach zu gering ist...
Naja hab ich mich wohl verschäzt....
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
minzel Hash-Algorithmus Allgemeine Java-Themen 9
I hash-algorithmus Allgemeine Java-Themen 9
E Hash Size (Sha 256) Allgemeine Java-Themen 5
Kirby.exe Hash Map Allgemeine Java-Themen 24
L Hash-Tabelle Allgemeine Java-Themen 2
J Passwort Verschlüsselung hash Allgemeine Java-Themen 2
Thallius Hash über serialisiertes Objekt? Allgemeine Java-Themen 3
T Hash von *.class-Datein überprüfen Allgemeine Java-Themen 1
W Passwort Clientseitig sicher ablegen ohne Hash Allgemeine Java-Themen 2
R Großes Hash-Set erzeugen Allgemeine Java-Themen 12
R MD5-Hash eines Strings bestimmen Allgemeine Java-Themen 2
J Hash aus Verzeichniss generieren Allgemeine Java-Themen 2
S Hash-Bereiche erstellen die gleichverteilt sind..? Allgemeine Java-Themen 8
J MD5-Hash einer Datei Allgemeine Java-Themen 4
O Hash Wert von Passwörter erstellen (SHA) Allgemeine Java-Themen 9
F Passwort hash Allgemeine Java-Themen 8
M@rk MD5 Hash Allgemeine Java-Themen 3
H Hash Tabelle einlesen und die Werte an ein Array übergeben Allgemeine Java-Themen 10
M Hash Tables Allgemeine Java-Themen 5
B Algorithmus für Arbeit mit fehlenden Listenelementen? Allgemeine Java-Themen 1
schegga_B AES-Algorithmus in javax.crypto Allgemeine Java-Themen 3
M Laufzeit des Prim Algorithmus Allgemeine Java-Themen 3
O Newton Algorithmus Java Allgemeine Java-Themen 1
CptK Backpropagation Algorithmus Allgemeine Java-Themen 6
N Google Authenticator Algorithmus (SHA1) Allgemeine Java-Themen 1
gotzi242 Schatzsuche mithilfe eines O(log n) Algorithmus Allgemeine Java-Themen 2
Zrebna Quicksort-Algorithmus - zufälliges Pivot wählen Allgemeine Java-Themen 6
L Klassen Algorithmus für das folgende Problem entwickeln? Allgemeine Java-Themen 30
B Algorithmus Warteschlange Ringpuffer wirklich fehlerfrei Allgemeine Java-Themen 8
M Probleme mit Negamax-Algorithmus Allgemeine Java-Themen 29
F Q - Learning Algorithmus Bug Allgemeine Java-Themen 4
M Salesman Problem - Bruteforce Algorithmus Allgemeine Java-Themen 23
M Minmax Algorithmus Verständnisproblem Allgemeine Java-Themen 2
H Rundreise frage (Algorithmus) Allgemeine Java-Themen 18
F KMP-Algorithmus Allgemeine Java-Themen 9
S Algorithmus welcher True-Werte in einem Array findet und auswertet. Allgemeine Java-Themen 5
U Methoden Algorithmus MergeSort String [ ] array sortieren programmieren Allgemeine Java-Themen 17
P MinMax Algorithmus Allgemeine Java-Themen 0
J Abhängigkeit zwischen Rechenzeit und Speicherbedarf in einen Algorithmus Allgemeine Java-Themen 7
K Djikstra-Algorithmus Allgemeine Java-Themen 1
T Minimax/Alphabeta Algorithmus hängt sich auf (?) Allgemeine Java-Themen 2
M Algorithmus zum Zahlen einteilen Allgemeine Java-Themen 8
O Best Practice Hilfe bei Algorithmus gesucht Allgemeine Java-Themen 10
S Algorithmus um Objekte auf einer Flaeche mit gleichem Abstand anzuordnen..? Allgemeine Java-Themen 20
S Rucksackproblem und genetischer Algorithmus Allgemeine Java-Themen 9
L Abbruch des Algorithmus Allgemeine Java-Themen 8
D Input/Output Ausgleichen chemischer Reaktionsgleichungen mit dem Gauß-Algorithmus Allgemeine Java-Themen 2
Messoras A*-Algorithmus integrieren Allgemeine Java-Themen 3
S Buchscan 3D Dewarp Algorithmus - Ansätze Allgemeine Java-Themen 1
B Verteilungs-/Vergabe-Algorithmus mit abhängigen Score-Werten Allgemeine Java-Themen 3
Androbin "Shunting Yard"-Algorithmus Allgemeine Java-Themen 6
B Algorithmus - Project Euler Problem 18 Allgemeine Java-Themen 2
N Algorithmus zum bewerten von mathematischen Funktionen Allgemeine Java-Themen 11
O Algorithmus Optimierung Allgemeine Java-Themen 3
Joew0815 Algorithmus - Zahlenfolge in 4 ähnliche Teile aufteilen Allgemeine Java-Themen 0
O Tag Cloud Algorithmus Idee gesucht Allgemeine Java-Themen 2
A Implementierung eines Algorithmus (Farthest Insertion zur Lösung des TSP) in O(n²) Allgemeine Java-Themen 2
C Eclipse Probleme bei selbst erstelltem Algorithmus Allgemeine Java-Themen 2
H Graph-Algorithmus gesucht Allgemeine Java-Themen 21
N Algorithmus durch Workflow Allgemeine Java-Themen 7
M tree-based diff Algorithmus (Code-Vergleiche) Allgemeine Java-Themen 3
S Uhrzeit Algorithmus sale Allgemeine Java-Themen 11
N A*-Algorithmus Allgemeine Java-Themen 5
A Suche Algorithmus zum Erstellen eines planaren Graphen Allgemeine Java-Themen 5
F Methoden Algorithmus zur Gegnerfindung (Turnier) Allgemeine Java-Themen 9
T Algorithmus Graph Allgemeine Java-Themen 10
J Algorithmus gesucht (Stringtransformation) Allgemeine Java-Themen 4
B Algorithmus Krankenhausbelegung Allgemeine Java-Themen 17
S Algorithmus von Dijkstra Allgemeine Java-Themen 2
alex_fairytail OOP Banknoten Algorithmus Teil 2 Allgemeine Java-Themen 13
2 ArrayList aktualisieren Algorithmus Allgemeine Java-Themen 11
alex_fairytail Methoden Banknoten Algorithmus Allgemeine Java-Themen 10
R Codehinweise: Algorithmus Größenvergleich von n Zahlen Allgemeine Java-Themen 5
SuperSeppel13 WTF?! Algorithmus-Geschwindigkeitstest Allgemeine Java-Themen 2
L Algorithmus für kürzesten Weg mit Wegpunkten Allgemeine Java-Themen 21
C Algorithmus Problem in Minesweeper Allgemeine Java-Themen 5
S Algorithmus um Labyrinth zu erzeugen Allgemeine Java-Themen 6
V Problem mit A* Pathfinder-Algorithmus Allgemeine Java-Themen 2
S Algorithmus um nächst folgende Primzahl zu berechnen Allgemeine Java-Themen 7
S Algorithmus Problem. Rechtecke effizient auf Spielfeld anordnen. Allgemeine Java-Themen 7
C Algorithmus-Hilfe Allgemeine Java-Themen 20
J Algorithmus Längenkombinationen? Allgemeine Java-Themen 7
M Kombinationen über rekursiven Algorithmus berechnen? Allgemeine Java-Themen 10
L Algorithmus für Poker-Hände Allgemeine Java-Themen 7
chik 2 return werte für Greedy-Algorithmus (gelöst) Allgemeine Java-Themen 3
D Abstruse Probleme mit eigenem replace Algorithmus Allgemeine Java-Themen 11
P RC4 Algorithmus Allgemeine Java-Themen 3
D RSA Verfahren - Erweiterter Euklidischer Algorithmus Allgemeine Java-Themen 4
C IBAN und Bic Validieren (Algorithmus) Allgemeine Java-Themen 10
P Problem mit A*-Algorithmus Allgemeine Java-Themen 12
M Wörter Algorithmus Allgemeine Java-Themen 7
M Algorithmus für automatische Zeilenumbrüche Allgemeine Java-Themen 12
K Postleitzahlen Algorithmus Allgemeine Java-Themen 12
G Problem mit Algorithmus Allgemeine Java-Themen 3
T Hilfe bei einem Algorithmus Allgemeine Java-Themen 2
S Stemming-Algorithmus gesucht (z.B. Porter) Allgemeine Java-Themen 2
RoliMG präfix zu infix algorithmus Allgemeine Java-Themen 6
Z A*-Algorithmus - Probleme mit offener/geschlossener Liste Allgemeine Java-Themen 7
S Javaimplementierung des MD5 Algorithmus Allgemeine Java-Themen 2
E Container-Pack-Algorithmus Allgemeine Java-Themen 4

Ähnliche Java Themen

Neue Themen


Oben