C++ 程式,用於實施 Naor-Reingold 偽隨機函式
Naor-Reingold 偽隨機函式是生成隨機數的另一種方法。
1997 年,Moni Naor 和 Omer Reingold 描述了採用私鑰和公鑰密碼進行各種加密原語的高效構造方法。令 p 和 l 為素數且 l | p−1。選擇乘法階為 l 的 Fp* 的元素 g ε。然後對於每個 n 維向量 a = (a0,a1, ..., an)。
他們定義函式
fa(x)=ga0.a1x1a2x2…..anxn ε Fp
其中 x = x1 … xn 是整數 x 的位表示,0 ≤ x ≤ 2 n−1
此函式可用作許多加密方案的基礎,包括對稱加密、身份驗證和數字簽名。
演算法
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示例程式碼
#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)<<" ";
}
}輸出
The Random numbers are: 81 81 3 9 3 81 9 9 3 9
廣告
資料結構
網路
RDBMS
作業系統
Java
iOS
HTML
CSS
Android
Python
C 程式設計
C++
C#
MongoDB
MySQL
Javascript
PHP