我正在尝试解密使用 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 消息: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。关于如何修复解密的任何想法?