Упрощенное шифрование Пайе в Matlab, проблема

Я не понимаю, в чем проблема, decrypted_m дает неправильное значение. Я использовал упрощенный алгоритм со страницы вики.

Если у кого-то есть подсказка или решение, было бы неплохо.

https://en.m.wikipedia.org/wiki/Paillier_cryptosystem

      range = [20 150] %nthprime range
p = nthprime(randi(range)); %initialize random primes
q = nthprime(randi(range));
flag = 0;

while flag == 0
if (gcd(p*q, (p-1)*(q-1)) == 1) %check primes
     flag = 1;
     break;
end
p = nthprime(randi(range));
q = nthprime(randi(range)); 
end

n = p*q;
lambda = (p-1)*(q-1);
g = n+1;
mu = mod(1/lambda, n);

publicKey = [n g]
privateKey = [lambda, mu]

m = input('Value to be encrypted: ');

flag2 = 0;
r = randi(range) 

while flag2 == 0
if (r>0 && r<n && gcd(r,n) == 1)
     flag2 = 1;
     break;
end  
r = randi(range)   
end

c = mod(powermod(g,m,n*n) * powermod(r,n,n*n), n*n);
x = powermod(c,lambda,n*n);
L = (x-1)/n;

decrypted_m = L*mod(mu, n)

0 ответов

Другие вопросы по тегам