Programa Java para implementar la función pseudo aleatoria de Naor-Reingold

La función pseudoaleatoria de Naor-Reingold es una función de generación de números aleatorios. Moni Naor y Omer Reingold describieron construcciones eficientes para varias primitivas criptográficas en la criptografía de clave privada y de clave pública.

Ejemplo:

Input : N = 5
Output: 9.0, 9.0, 3.0, 9.0, 3.0

Input : N = 7
Output: 9.0, 81.0, 9.0, 9.0, 3.0, 3.0, 9.0

Algoritmo:

  • Declare las variables p, l, g, n, x y las arrays a[] y arr[]
  • Tome la entrada del usuario para generar números aleatorios
  • Genere números aleatorios y utilice el enfoque definido:
Let p and l be prime numbers with l|p−1.
Select an element g ε Fp* of multiplicative order l. 
Then for each n-dimensional vector a = (a0,a1, ..., an).

They define the function as:
fa(x)=ga0.a1x1a2x2…..anxn ε Fp
  • Imprime los números aleatorios

A continuación se muestra la implementación de la función pseudoaleatoria de Naor-Reingold:

Java

// Java Program to Implement Naor-Reingold
// Pseudo Random Function
import java.util.*;
public class Main {
    public static void randomNumbers()
    {
        // Creating arrays and defining variables
        int p = 7, l = 2, g = 3, n = 6, x;
  
        int a[] = { 1, 2, 2, 1 };
  
        int arr[] = new int[4];
  
        Random random = new Random();
  
        int num = 10;
        System.out.println("The Random numbers are: ");
  
        // Generating Random Numbers using
        // Naor-Reingold Pseudo Random Function approach
        for (int i = 0; i < num; i++) {
            x = random.nextInt(num) % 16;
  
            for (int j = 3; j >= 0; j--) {
                arr[j] = x % 2;
                x /= 2;
            }
            int mult = 1;
  
            for (int k = 0; k < 4; k++) {
                mult *= Math.pow(a[k], arr[k]);
            }
            System.out.print(Math.pow(g, mult) + ", ");
        }
    }
    public static void main(String args[])
    {
        randomNumbers();
    }
}
Producción

The Random numbers are: 
9.0, 9.0, 3.0, 81.0, 3.0, 81.0, 9.0, 9.0, 3.0, 3.0, 

Publicación traducida automáticamente

Artículo escrito por rbbansal y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *