bonjour je tente de faire une fonction qui crée un nombre binaire de 128bit aléatoirement.
pour cela je transforme 2 entiers de type long en chaîne binaire grâce a un masque et je les concatènes.
les types long en java sont censés être codés sur 64 bits, ils sont signés donc je crée un nouvel long aléatoire que je divise par 2 si le reste = 0 alors je multiplie mes 2 premiers long par -1 (histoire que le bit de poids fort soit a 1 aléatoirement, rapport a la non présence du type unsigned en java (ou alors j'ai pas trouvé)).
voila enfin tout ça pour dire que mes 2 long se retrouve codé sous 32 bits a la fin de ma fonction, pourquoi ? je ne sais pas pourriez vous me dépanner ou m'indiquer une mèthode plus simple pour obtenir ma String aléatoire de 128 bits ?
ci joint le code de ma fonction :
PS : les JOptionPane sont juste présent pour le débuggage...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49 public String genererGraineLFSR2() { String graine =""; Random r = new Random(); // on genere 2 long qui mis bout a bout donneront la clé long pseudoaleatoire1 = r.nextLong(); long pseudoaleatoire2 = r.nextLong(); long tmp = r.nextLong(); long reste = tmp % 2; if (reste == 0) pseudoaleatoire1 = (pseudoaleatoire1 * -1); tmp = r.nextLong(); reste = tmp % 2; if (reste == 0) pseudoaleatoire2 = (pseudoaleatoire2 * -1); JOptionPane.showMessageDialog(null, pseudoaleatoire1 ); JOptionPane.showMessageDialog(null, pseudoaleatoire2 ); int masque = 1; boolean[] bin = new boolean[64]; for( int i = 0; i < 64; i++ ) { bin[i] = ((pseudoaleatoire1 & masque) != 0); if( bin[i] ) graine = "1" + graine; else graine = "0" + graine; masque *= 2; } JOptionPane.showMessageDialog(null, graine ); masque = 1; for( int i = 0; i < 64; i++ ) { bin[i] = ((pseudoaleatoire2 & masque) != 0); if( bin[i] ) graine = "1" + graine; else graine = "0" + graine; masque *= 2; } String lol = graine.substring(0,64); JOptionPane.showMessageDialog(null, lol ); return graine; }
merçi d'avance
Partager