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 を書き直すよりも数式を修正したいと考えています。復号化を修正する方法についてのアイデアはありますか?