我正在尝试为RSA算法编写代码,我的代码正确生成(e,d,n),但是当我计算密码时会出现问题。 cipher =(plain ^ e)mod n。 因为(plain ^ e)是一个非常大的数字。 计算器给出了正确的结果,而Matlab却没有。谁有想法?
clc
e=61;
d=21;
n= 187;
Neuler=160;
Plain='ABCD';
Plain=uint64(Plain);
%%Encrypting Progress
for i=1:length (Plain);
Cypher(i)=mod((Plain(i)^e),n);
end
Numeri_Cypher=uint64(Cypher);
for i=1:length (Numeri_Cypher);
RPlain(i)=mod((Numeri_Cypher(i)^d),n);
end
Result=char(RPlain)
答案 0 :(得分:2)
内置函数mod
无法处理大整数。所以我创建了一个模幂运算的小实现,如果你使用这个函数你应该没有问题。
function result = modpow(base,exp,m)
result = 1;
while (exp > 0)
if bitand(exp,1) > 0
result = mod((result * base),m);
end
exp = bitshift(exp,-1);
base = mod(base^2,m);
end
end
示例:强>
内置mod功能:
mod(3^233249,4)
ans = 0 %incorrect result
使用modpow功能
modpow(3,233249,4)
ans = 1 %correct result