Упрощенное шифрование Пайе в 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)