我想使用ASCII值將字符加密(RSA)爲整數。例如。 'a'加密爲48.C++中的RSA加密
對於加密:c=pow(m,e)%n
其中c是密文,m是純文本,(e,n)是公鑰。
如果POW(M,E)是大說67^7,它不適合在INT或長。但是如果我使用double,我不能用模數%運算符來使用它。所以我寫了使用for循環此功能加密:
int encrypt(int m, int e, int n)
{
int res=m, i;
for(i=0; i<e-1;i++)
res=(res*res)%n;
return res;
}
它工作了67^7mod11是67,但後來我才知道這是不是實際上是正確的。我哪裏錯了?
你是做'E-1' squarings,所以你計算'平方公尺(2 ^(E -1))'modulo'n'。對於通過重複乘法算法進行的簡單求冪,您希望'res =(res * m)%n;'。 –
你可以寫這個答案,我可以接受它嗎? –
+1 to @DanielFischer。我即將開始進行模連鎖,只是看到他已經擁有了它,但在迭代中丟失了一個循環並使用了錯誤的乘法器。咄。好的趕上! – WhozCraig