A Java SecureRandom osztály

Java Top

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT

1. Bemutatkozás

Ebben a rövid bemutatóban megismerjük java.security.SecureRandom, egy osztály, amely kriptográfiailag erős véletlenszám-generátort biztosít.

2. Összehasonlítás a java.util.Random

A JDK szabványos megvalósításai java.util.Random használjon lineáris kongruenciális generátor (LCG) algoritmust véletlenszerű számok megadásához. Az algoritmus problémája, hogy nem kriptográfiailag erős. Más szavakkal, a generált értékek sokkal kiszámíthatóbbak, ezért a támadók felhasználhatják a rendszerünk veszélyeztetésére.

Ennek a kérdésnek a leküzdéséhez meg kell tennünk használat java.security.SecureRandom az esetleges biztonsági döntésekben. Az a használatával kriptográfiailag erős véletlenszerű értékeket állít elő kriptográfiailag erős ál-véletlenszám-generátor (CSPRNG).

Az LCG és a CSPRNG közötti különbség jobb megértése érdekében kérjük, tekintse meg az alábbi táblázatot, amely mindkét algoritmus értékeinek megoszlását mutatja be:

3. Véletlen értékek generálása

A használat leggyakoribb módja SecureRandom az generál int, hosszú, úszó, kettős vagy logikai értékek:

int randomInt = secureRandom.nextInt (); hosszú randomLong = secureRandom.nextLong (); float randomFloat = biztonságosRandom.nextFloat (); double randomDouble = biztonságosRandom.nextDouble (); logikai véletlenszerűBoolean = biztonságosRandom.nextBoolean ();

A generálásért int értékeket átadhatunk egy felső határnak paraméterként:

int randomInt = secureRandom.nextInt (upperBound);

Ezen kívül megtehetjük értékfolyamot generál mert int,kettős és hosszú:

IntStream randomIntStream = secureRandom.ints (); LongStream randomLongStream = secureRandom.longs (); DoubleStream randomDoubleStream = secureRandom.doubles ();

Valamennyi adatfolyamhoz kifejezetten beállíthatjuk az adatfolyam méretét:

IntStream intStream = secureRandom.ints (streamSize);

valamint az eredet (beleértve) és a kötött (kizáró) értékeket is:

IntStream intStream = secureRandom.ints (streamSize, originValue, boundValue);

Generálhatunk a véletlenszerű bájtsorozat. A nextBytes () funkció a felhasználó által biztosított byte tömböt és véletlenszerűen tölti ki bytes:

bájt [] értékek = új bájt [124]; secureRandom.nextBytes (értékek);

4. Algoritmus kiválasztása

Alapértelmezés szerint, SecureRandom az SHA1PRNG algoritmust használja véletlenszerű értékek előállításához. Kifejezetten felhasználhatjuk egy másik algoritmus használatára az getInstance () módszer:

SecureRandom secureRandom = SecureRandom.getInstance ("NativePRNG");

Teremtés SecureRandom a ... val új operátor egyenértékű SecureRandom.getInstance („SHA1PRNG”).

A Java-ban elérhető összes véletlenszám-generátor megtalálható a hivatalos docs oldalon.

5. Magok

Minden példánya SecureRandom kezdeti maggal jön létre. Alapul szolgál a véletlenszerű értékek és változások megadásához, valahányszor új értéket generálunk.

Használni a új üzemeltető vagy hívó SecureRandom.getInstance () -tól megkapja az alapértelmezett magot / dev / urandom.

Megváltoztathatjuk a magot, ha konstruktor paraméterként adjuk át:

bájt [] mag = getSecureRandomSeed (); SecureRandom secureRandom = új SecureRandom (mag);

vagy egy szetter metódus meghívásával a már létrehozott objektumra:

bájt [] mag = getSecureRandomSeed (); secureRandom.setSeed (mag);

Ne feledje, hogy ha két példányt hozunk létre SecureRandom ugyanazzal a maggal, és mindegyikre ugyanaz a metódushívási sorrend jön létre azonos számsorozatot generál és ad vissza.

6. Következtetés

Ebben az oktatóanyagban megtanultuk, hogyan SecureRandom működik, és hogyan lehet felhasználni véletlenszerű értékek előállítására.

Mint mindig, ebben az oktatóanyagban bemutatott összes kód megtalálható a GitHubon.

Java alsó

Most jelentettem be az újat Tanulj tavaszt tanfolyam, amelynek középpontjában az 5. tavasz és a tavaszi bakancs 2 alapjai állnak:

>> ELLENŐRIZZE A FOLYAMATOT

$config[zx-auto] not found$config[zx-overlay] not found