2

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

4

2 に答える 2