Octave中的RSA实现

时间:2014-12-08 15:06:28

标签: algorithm encryption rsa octave

我试图在Octave中实现一个简单的RSA计算示例,但是当使用大于9900(素数)的p和q时,我遇到了问题。 我怀疑它是因为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 但它是用捷克语写的。

1 个答案:

答案 0 :(得分:1)

好的,我重写了生成代码,现在它可以使用更大的数字(p和q,最高可达~45000)

function [n,Phi,d,e] = rsa (p,q)
x=2;i=1;
n=0;Phi=0;e=0;d=0;
n=uint64(n); Phi=uint64(Phi); d=uint64(d); e=uint64(e);

n=p*q;
Phi=(p-1)*(q-1);

e = input('e:');

if(gcd(Phi,e) > 1)
    while gcd(Phi, e) > 1
        if(e<=2)
            e = Phi/4;
        else 
            e--;
        end
    end
    printf('e = %i', e);
end

if gcd(e,Phi) ~= 1
    error('d can't be calculated')
end
    [c,a,b] = gcd(e,Phi);
    d = mod(a,Phi); 
endfunction

其余代码类似,我只是将所有内容都转换为uint64:)

我的代码放在这里,如果有人想试试https://dl.dropboxusercontent.com/u/20809963/rsa.m