Computer >> Máy Tính >  >> Lập trình >> C ++

Chương trình C ++ để triển khai hàm ngẫu nhiên giả Naor-Reingold

Naor-Reingold Pseudo Random Function là một phương pháp tạo số ngẫu nhiên khác.

Moni Naor và Omer Reingold đã mô tả các cấu trúc hiệu quả cho các nguyên thủy mật mã khác nhau trong khóa cá nhân cũng như mật mã khóa công khai, vào năm 1997. Cho p và l là các số nguyên tố với l | p-1. Chọn một phần tử g ε Fp * có bậc nhân l. Sau đó, đối với mỗi vectơ n-chiều a =(a 0 , một 1 , ..., a n ).

Họ xác định chức năng

fa(x)=ga0.a1x1a2x2…..anxn ε Fp

trong đó x =x 1 … X n là biểu diễn bit của số nguyên x, 0 ≤ x ≤ 2 n − 1

Chức năng này có thể được sử dụng làm cơ sở của nhiều lược đồ mật mã bao gồm mã hóa đối xứng, xác thực và chữ ký số.

Thuật toán

Begin
   Declare the variables p, l, g, n, x
   Read the variables p, l, g, n
   Declare array a[], b[]
   For i=0 to 10, do
      x = rand() mod 16;
      For j=g to 0, do
         b[j] = x mod 2;
         x =x divided by2;
      Done
      Assign mult = 1
      For k = 0 to n do
         mult = mult *(pow(a[k], b[k]))
      Done
      Print the random numbers
   Done
End

Mã mẫu

#include <iostream>
using namespace std;
int main(int argc, char **argv) {
   int p = 7, l = 2, g = 3, n = 6, x;
   int a[] = { 1, 2, 2, 1 };
   int b[4];
   cout << "The Random numbers are: ";
   for (int i = 0; i < 10; i++) {
      x = rand() % 16;
      for (int j = 3; j >= 0; j--) {
         b[j] = x % 2;
         x /= 2;
      }
      int mult = 1;
      for (int k = 0; k < 6; k++)
         mult *= pow(a[k], b[k]);
      cout << pow(g, mult)<<" ";
   }
}

Đầu ra

The Random numbers are: 81 81 3 9 3 81 9 9 3 9