3
3.1 : , .
. , . , 2. , T( i ) , 64 . ( i ) .
: ( i ) = ( i ) Å ( i ) , i = 1... M,
( i ) i - ;
( i ) i - ;
( i ) i - ;
M - .
. : (i) = (i) Å (i) , i = 1... M.
, , , 2, . . . . , , , , . ( ) :
¨ ;
¨ , , ;
¨ .
. , .
. Y1, Y2,..., Yi-1, Yi,..., Yi = (a Yi-1 + b) mod m, Yi - i- () ; Yi-1 ; a ; b ; Y0 ( ). Yi Yi-1 , b m. , a b, m. m 2n, n - , , m=2311. . , , b , a mod 4 = 1.
|
|
: Yi = (a Yi-1) mod m. a m , . Yi Yi-1 Yi-2 m: Yi = (Yi-1 + Yi-2) mod m. : Yi = (*Yi-1 + μ) mod m.
1. .
2. .
3. .
4. , 2 .
5. , 2, 6.
6. .
1. .
2. .
3. .
4. , 2 .
5. , 2, 6.
6. .
, e Fin. () Fout. a = 5, m = 4096, Y0 = 4003.
#include<iostream>
#include<math.h>
#include<string>
#define a 5
#define m 4096
#define y0 4003
#define n 8
#define N 256 //
int Rnd(char*);
int main(){
char G[n];
char Fin[N], Fout[N], ch, Buff[n], Text[n];
int i, j;
std::cin.getline(Fin,N);
j=0;
do{
Rnd(G);
for(i=0;i<n;i++) {
ch=Fin[j];
Buff[i]=int(ch);
Text[i]=Buff[i]^G[i];
Fout[i]=char(Text[i];}
j++;
} while(Fin[j]!=NULL);
return 1;}
//
int Rnd(char *t){
int i, y;
for(y=y0,i=0;i<n; i++){
y=(a*y)%m;
t[i]=y;}
return 1;}
(1,3,,29) , (2,4,,30) . , . , .
|
|
. | ||
1-2 | m = 4096, Y0 = 4003, Y1 = 59 | |
3-4 | = 5, b=7, m = 4096, Y0 = 4003 | |
5-6 | = 7, m = 4096, Y0 = 502 | |
7-8 | m = 4096*4, Y0 = m-5, Y1 = 4091 | |
9-10 | =5, m = 4096, Y0 = m-5 | |
11-12 | = 5, m = 4096, Y0 = 3091 | |
13-14 | = 2045, m = 4096, μ=1162, Y0 = 4001 | |
15-16 | = 9, b=5, m = 4096, Y0 = 502 | |
17-18 | = 165, m = 4096*4, μ=3463, Y0 =3887 | |
19-20 | m = 4096*4, Y0 = 3971, Y1 = 1013 | |
21-22 | = 9, m = 4096, Y0 - | |
23-24 | = 5, b=5, m = 4096*4, Y0 = 3215 | |
25-26 | m = 4096, Y0 Y1 - | |
27-28 | M = 4096*4, Y0 = 3215, Y1 = 4073 | |
29-30 | = 5, m = 4096*4, Y0 = 3091 |
3.5
1. ? ?
2. ? ?
3. ? ?
4. .
5. .
6. .