Toutes les mêmes chaînes de code de hachage en 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 millions de boucles
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();

Site de référence: https://stackoverflow.com/questions/8669946/application-vulnerability-due-to-non-random-hash-functions

Recommended Posts

Toutes les mêmes chaînes de code de hachage en Java
Code pour échapper aux chaînes JSON en Java
Exemple de code pour convertir List en List <String> dans Java Stream
Écrire du code de type Java8 en Java8
Environnement Java Spring dans vs Code
Code de création de chaîne arbitraire par Java
[Java] Reflash des valeurs pour tous les éléments de BeanClass
Chaîne Java
Concernant la comparaison d'équivalence de type de chaîne en Java
Diviser une chaîne avec ". (Dot)" en Java
[Mac] Installer Java dans Visual Studio Code
L'histoire de la comparaison de chaînes de bas niveau en Java
Exécuter du code Java de manière scriptée
Ajouter l'option --enable-preview dans Java dans Visual Studio Code
Analyse de code statique par Checkstyle avec Java + Gradle
[Java] Remplissage de la chaîne de caractères
Exemple de code Java 02
Exemple de code Java 03
Changements dans Java 11
Essayez d'utiliser Sourcetrail (version win) avec du code Java
Janken à Java
Exemple de code Java 04
Essayez d'utiliser Sourcetrail (version macOS) avec du code Java
Traitement des chaînes Java
[AtCoder Problem-ABC001] Observation du vent C-Do en Java [Code]
Code pour supprimer tous les fichiers du préfixe spécifié dans AWS S3 (Java)
Exemple de code Java 01
Code de caractère Java
Taux circonférentiel à Java
Chaîne divisée (Java)
Comment écrire Java String # getBytes dans Kotlin?
Importer des fichiers de la même hiérarchie en Java
[Angoisse du débutant Java] Code difficile à tester implémenté dans Junit
FizzBuzz en Java
[Mac] Installer Java dans Visual Studio Code (VS Code)
Tout supprimer du SDK Java dans Azure CosmosDB
N'écrivez pas de code si (isAdmin == true) en Java
Obtention des objets Locale pour tous les paramètres régionaux disponibles en Java
Java11: exécuter le code Java dans un seul fichier tel quel
Différences de code lors de l'utilisation du système de longueur en Java
Lire JSON en Java
Faites un blackjack avec Java
Programmation par contraintes en Java
Mettez java8 dans centos7
NVL-ish guy en Java
Joindre des tableaux en Java
"Hello World" en Java
Interface appelable en Java
Commentaires dans la source Java
[Java] Comparaison des chaînes de caractères et && et ||
Fonctions Azure en Java
Remplacement multiple de chaîne Java
Formater XML en Java
Simple htmlspecialchars en Java
Hello World en Java
Utiliser OpenCV avec Java
Mémorandum WebApi avec Java
Détermination de type en Java
[Note] Java: enquête sur les chaînes de caractères
Exécuter des commandes en Java (ping)