我試圖解密是使用RSA算法問題RSA解密式
從上面的例子是從Website取加密的消息,所以我試圖實現它在C#:
int msg = 67;
int Ee = 5;
int Nn = 91;
int Dd = 29;
var cipher = Math.Pow(msg, Ee) % Nn;
var msg2 = Math.Pow(cipher, Dd) % Nn;
MessageBox.Show("Msg: " + msg.ToString() + " cipher: " + cipher.ToString()
+ " msg: " + msg2.ToString());
,輸出爲以下幾點:
消息:67密碼:58 msg:45
正如你所看到的 - 加密工作正常,但解密不是!
於是我就和檢查網站和事實證明,Javaspript使用另一個公式:
function mod(m, n)
{
return m - n*Math.floor(m/n)
}
function PowerMod(x,p,N)
// Compute x^p mod N
{
var A = 1
var m = p
var t = x
while(m > 0)
{
k = Math.floor(m/2)
r = m - 2*k
if(r == 1)
A = mod(A*t, N)
t = mod(t*t, N)
m = k
}
return A
}
var temp = ""
var e = form.e.value
var d = form.d.value
var N = form.N.value
var M = form.Msg.value
form.Cipher.value = PowerMod(M,e,N)
var C = form.Cipher.value
form.Decipher.value = PowerMod(C,d,N)
而不是複製和粘貼準備公式 - 我想知道爲什麼我的做法是不工作,我寧願修復我的公式,而不僅僅是重寫JS。關於如何解決解密的任何想法?
容易實現但不安全的解決方案是'BigInteger.ModPow' – CodesInChaos 2013-05-14 05:48:53