Professional Documents
Culture Documents
LUCRARE PRACTICA: Exponentierea Modulară: Z 1 Z Z Mod N 1 Then Z Z X Mod N 1550 Mod 4444 560
LUCRARE PRACTICA: Exponentierea Modulară: Z 1 Z Z Mod N 1 Then Z Z X Mod N 1550 Mod 4444 560
LUCRARE PRACTICA: Exponentierea Modulară: Z 1 Z Z Mod N 1 Then Z Z X Mod N 1550 Mod 4444 560
Algoritmul:
z=1;
for i =s-1
Exemplul downto
practic: 0 do
z= z2 mod n
if ci =1 then z=z*x mod n
1550 2789 mod 4444 = 560
c = 2789
x = 1550
n = 4444
(2789)10 = (101011100101)2
i ci Z=1
13 1 z= z2 mod n = 12 mod 4444=1 * 1550 mod 4444 = 1550
12 0 15502 mod 4444 = 2740
11 1 27402 mod 4444 = 1684 * 1550 mod 4444 = 1572
10 0 15722 mod 4444 = 320
9 1 3202 mod 4444 = 188 * 1550 mod 4444 = 2540
8 1 25402 mod 4444 = 3356 * 1550 mod 4444 = 2320
7 1 23202 mod 4444 = 716 * 1550 mod 4444 = 3244
6 0 32442 mod 4444 = 144
5 0 1442 mod 4444 = 2960
4 1 29602 mod 4444 = 2476 * 1550 mod 4444 = 2628
3 0 26282 mod 4444 = 408
2 1 4082 mod 4444 = 2036 * 1550 mod 4444 = 560
n0 = n; b0 = b; t0 = 0; t = 1;
q = n0 / b0; r = n0 – q*b0;
while r > 0 do
temp = t0 – q*t;
if temp >= 0 then temp = temp mod n
else temp = n – ((- temp) mod n)
n0 = b0; b0 = r; t0 = t; t= temp;
q = n0/ b0; r = n0 – q*b0;
if b0 != 1 then b nu are inversă mod n
else b-1 mod n = t;
Exemplul practic nr. 1:
2000-1 mod 662 =
b = 2000
n = 662
b nu are inversă, b0 != 1 , b0 = 2
n0 b0 q r t0 t temp
1 662 2000 0 662 0 1 0
2 2000 662 2 676 1 0 1
3 662 676 0 662 0 1 0
4 676 662 1 14 1 0 1
5 662 14 47 564 0 1 615
6 14 564 0 14 1 615 1
7 564 14 40 4 615 1 575
8 14 4 3 2 1 575 262
9 4 2 2 0 575 262
Calcule matematice:
n0 b0 q r t0 t temp
1 890 211 4 46 0 1 886
2 211 46 4 27 1 886 17
3 46 27 1 19 886 17 869
4 27 19 1 8 17 869 38
5 19 8 2 3 869 38 793
6 8 3 2 2 38 793 232
7 3 2 1 1 793 232 561
8 2 1 2 0 232 561
Calcule matematice:
I. Dacă numărul este mai mic decât 0x80, atunci trece doar 1 bit spre stânga
Exemplu: 25 * 2 = 00011001 << 1 = 00110010 = 50
II. Dacă numărul este mai mare de 0x80, atunci este XORed cu 0x1b (00011011), și este
deplasat 1 bit spre stânga
Exemplu: 148 * 2 = (10010100 xor 00011011) << 1 = 10001011 << 1 = 00010111 = 23
148 * 4: 23 + 23 = 46
148 * 2 = (10010100 xor 00011011) << 1 = 10001011 << 1 = 00010111 = 23
148 * 2 = (10010100 xor 00011011) << 1 = 10001011 << 1 = 00010111 = 23