Ich habe einige Arbeit mit Javas SecureRandom-Klasse gemacht, um Salze für die spätere Verschlüsselung und Kennwort Hashing zu generieren (ich erzeuge separate Salze für jede Aufgabe). Der Code, den ich verwendet habe, ist wie folgt:Java und kryptografisch starke Zufallszahlen
//Init random number generator
secureRandom = SecureRandom.getInstance("SHA1PRNG");
secureRandom.setSeed(System.nanoTime());
//Create salts
secureRandom.nextBytes(bytAuthSalt);
secureRandom.nextBytes(bytEncryptionSalt);
Nun, alles ging gut, bis ich tatsächlich begonnen, um die Werte zu überprüfen, die ich habe. Für mehrere aufeinanderfolgende Ausführungen der Anwendung meine Salze waren:
[[email protected]
[[email protected]
[[email protected]
[[email protected]
[[email protected]
[[email protected]
ich durch die Tatsache gestört bin, dass die Zahlen alle erscheinen grob sequenziellen sein. Nach einigem Suchen im Web, wiederholte ich die Läufe erneut, ohne sie selbst zu den gleichen Ergebnissen zu bringen.
Meine einzige Vermutung darüber, was dies verursacht, kommt von der Tatsache, dass ich für die Android-Plattform entwickle. Ich weiß, dass sie ihre eigenen kryptografischen Anbieter haben, aber ich bekomme keine Ausnahmen. irgendwelche Ideen?
Vielen Dank im Voraus.
Wenn ich mich nicht irre, wird das die Bytes mit dem Standard-Zeichensatz interpretieren, anstatt rohe Bytes auszudrucken. Will das OP nicht die rohen Bytes und nicht die ASCII-äquivalenten Zeichen? –
@ RD01 - Aber immer noch, es wird OP eine gute Sicht auf Werte Zufälligkeit geben. – Rogach
@rogach Ich stimme zu, aber viele dieser Werte werden als Ctrl-Zeichen oder Leerzeichen angezeigt, so dass Sie nicht alle Bytes auswerten können. –