Alle gleichen Hash-Code-Zeichenfolgen in Java

All same hash code string in Java

final String p1 = "AaBB";
final String p2 = "BBAa";
final String p3 = "BBBB";
final String[] pp = new String[] { p1, p2, p3 };
final int ppLength = pp.length;
Random random = new Random();
random.setSeed(System.currentTimeMillis());
final int size = 10;
final int length = size * 4;
final int times = 2_000_000; //n Millionen Schleifen
Map<String, String> map = new HashMap<>(10000);
File file = new File("r:/1.txt");
file.delete();
BufferedWriter bw = new BufferedWriter( //
    new OutputStreamWriter( //
            new FileOutputStream(file, true) // append
            , Charset.forName("UTF-8") // charset
    ) //
    , 1024 // buffer size
);
StringBuffer sb = new StringBuffer(length);
for (int ii = 0; ii < size; ii++) {
    sb.append(pp[random.nextInt(ppLength)]);
}
final int hashCode = sb.toString().hashCode();
sb.setLength(0);
for (int count = 0; count < times; count++) {
    for (int ii = 0; ii < size; ii++) {
        sb.append(pp[random.nextInt(ppLength)]);
    }
    String ss = sb.toString();
    if (!map.containsKey(ss)) {
        if (ss.hashCode() != hashCode) {
            bw.flush();
            bw.close();
            throw new RuntimeException("hashCode not equal");
        }
        map.put(ss, ss);
        bw.append(ss);
        bw.newLine();
    }
    sb.setLength(0);
}
System.out.println(map.size());
bw.flush();
bw.close();

Referenzseite: https://stackoverflow.com/questions/8669946/application-vulnerability-due-to-non-random-hash-functions

Recommended Posts

Alle gleichen Hash-Code-Zeichenfolgen in Java
Code zum Escapezeichen von JSON-Zeichenfolgen in Java
Beispielcode zum Konvertieren von List in List <String> in Java Stream
Schreiben Sie Java8-ähnlichen Code in Java8
Java Spring-Umgebung in vs Code
Beliebiger Code zum Erstellen von Zeichenfolgen durch Java
[Java] Reflash-Werte für alle Elemente in BeanClass
Java-Zeichenfolge
In Bezug auf den Vergleich der Zeichenfolgentypäquivalenz in Java
Teilen Sie eine Zeichenfolge in Java mit ". (Dot)"
[Mac] Installieren Sie Java in Visual Studio Code
Die Geschichte des einfachen String-Vergleichs in Java
Führen Sie Java-Code skriptweise aus
Fügen Sie in Java in Visual Studio Code die Option --enable-Preview hinzu
Führen Sie eine statische Code-Analyse mit Checkstyle mit Java + Gradle durch
[Java] Auffüllen von Zeichenfolgen
Java-Beispielcode 02
Java-Beispielcode 03
Änderungen in Java 11
Versuchen Sie es mit Sourcetrail (Win-Version) mit Java-Code
Janken in Java
Java-Beispielcode 04
Versuchen Sie es mit Sourcetrail (MacOS-Version) mit Java-Code
Java-String-Verarbeitung
[AtCoder Problem-ABC001] C-Do Windbeobachtung in Java [Code]
Code zum Löschen aller Dateien mit dem angegebenen Präfix in AWS S3 (Java)
Java-Beispielcode 01
Java-Zeichencode
Umfangsrate in Java
Geteilter String (Java)
Wie schreibe ich Java String # getBytes in Kotlin?
Importieren Sie Dateien derselben Hierarchie in Java
[Java-Anfängerangst] In Junit implementierter schwer zu testender Code
FizzBuzz in Java
[Mac] Java in Visual Studio Code installieren (VS Code)
Löschen Sie alle aus dem Java SDK in Azure CosmosDB
Schreiben Sie keinen Code, wenn (isAdmin == true) in Java
Abrufen von Gebietsschemaobjekten für alle in Java verfügbaren Gebietsschemas
Java11: Führen Sie Java-Code unverändert in einer einzelnen Datei aus
Unterschiede im Code bei Verwendung des Längensystems in Java
Lesen Sie JSON in Java
Machen Sie einen Blackjack mit Java
Einschränkungsprogrammierung in Java
Setzen Sie Java8 in Centos7
NVL-artiger Typ in Java
Verbinden Sie Arrays in Java
"Hallo Welt" in Java
Aufrufbare Schnittstelle in Java
Kommentare in der Java-Quelle
[Java] Vergleich von Zeichenketten und && und ||
Azure funktioniert in Java
Mehrfacher Ersatz für Java-Zeichenfolgen
Formatieren Sie XML in Java
Einfache HTML-Spezialchars in Java
Hallo Welt in Java
Verwenden Sie OpenCV mit Java
WebApi-Memorandum mit Java
Typbestimmung in Java
[Hinweis] Java: Zeichenkettenübersicht
Befehle in Java ausführen (Ping)