Я пытаюсь реализовать простой пример вычисления RSA в Octave, но у меня возникла проблема при использовании p и q больше 9900 (простых чисел). Я подозреваю, что это из-за ограничения размера числа в Octave?Реализация RSA в Octave
Есть ли другой подход, который я могу попробовать? Благодаря
Я использую этот алгоритм для генерации ключей:
function [n,Phi,d,e] = rsa (p,q)
x=2;i=1;
n=p*q; %to calculate n
Phi=(p-1)*(q-1); %to calculate Phi
e=(Phi/4);
while x > 1
e--; %to calculate e (I know it should be random)
x = gcd(Phi, e);
end
val1=0;
d=Phi-e;
while(val1!=1);
d--; %to calculate d (this is really nasty way, anyone can help?)
val1=mod(d*e,Phi);
end
endfunction
, а затем я прочитал сообщение, закодировать его в ASCII и зашифровать его
function result = modexp (base, exponent, modulus)
result = 1;
base = mod(base, modulus);
while (exponent > 0)
if (mod(exponent, 2) == 1)
result = mod((result * base) ,modulus);
end
exponent = bitshift(exponent,-1);
base = mod((base * base) ,modulus);
end
endfunction
по телефону
Msg = toascii(Msg,x); %my function to convert message to ASCII
for j= 1:x
cipher(j)= modexp(Msg(j),e,n); %message encryption
end
display(cipher);
for j= 1:x
message(j)= modexp(cipher(j),d,n); %message decryption
end
display(message)
Как я уже говорил, этот код не работает для p и q больше, чем 9900.
Любая помощь будет очень признательна, спасибо.
PS: весь код можно найти здесь: https://dl.dropboxusercontent.com/u/20809963/rsa.m , но это написано на чешском языке.
Какие части этого кода не удается? Кажется, что ваше ключевое поколение содержит немодульное умножение 'mod (d * e, Phi)' в цикле. –
Ну, код работает, просто не для больших p и q, я бы хотел, чтобы он работал с большими числами. – Salamander
Снова * где * и * как * это не удается? «Код не работает» и «сбой кода» - это не очень подробные сообщения об ошибках, надеюсь, вы согласитесь на это. –