0

関数 XpowYmodN を作成するには、Diffie Hellman プロトコルが必要です。次の関数をオンラインで見つけました。

    public long XpowYmodN(long x, long y, long N) {
    long result = 1;
    final long oneShift63 = ((long) 1) << 63;

    for (int i = 0; i < 64; y <<= 1, i++) {
        result = result * result % N;
        if ((y & oneShift63) != 0)
            result = result * x % N;
    }
    return result;
}

この例の場合: XpowYmodN(29,83,53) 結果は 43 です。デバイス計算の製造元によると、結果は 50 になるはずです。間違っているところを教えてもらえますか? この例では、Math.pow(X,Y) % N を試してみましたが、結果は 28 になりました。ありがとうございました。

4

3 に答える 3

0

その関数にさまざまな数値をテストしたところ、うまく機能しました。次に、Uwe Plonus の回答に基づいて、次のコードを使用する複製関数を作成しました。

public long XpowYmodN(long x, long y, long N) {
    return BigInteger.valueOf(x).modPow(BigInteger.valueOf(y), BigInteger.valueOf(N)).longValue();
}

あなたの数字をテストしたところ、その関数と同じように 43 を得ました。その機能は完全に機能しているようです。29、83、53 の数字を 50 として投稿した人は間違っているようです。29,83,53 の正解は 43 です。

私が使用した完全なコードは次のとおりです。

public class Main {
    public static long XpowYmodN_(long x, long y, long N) {
        long result = 1;
        final long oneShift63 = ((long) 1) << 63;

        for (int i = 0; i < 64; y <<= 1, i++) {
            result = result * result % N;
            if ((y & oneShift63) != 0)
                result = result * x % N;
        }
        return result;
    }

    public static long XpowYmodN(long x, long y, long N) {
        return BigInteger.valueOf(x).modPow(BigInteger.valueOf(y), BigInteger.valueOf(N)).longValue();
    }

    public static void main(String[] args)
    {
        System.out.println("BEGIN main");


        System.out.println(Main.XpowYmodN_(29,83,53));
        System.out.println(Main.XpowYmodN(29,83,53));
    }
}

次の出力が得られました。

BEGIN メイン
43
43
于 2013-07-06T15:41:06.857 に答える
0

クラスを使わないのはなぜjava.math.BigIntegerですか?このクラスには、modPow()暗号化を使用するために設計された と呼ばれるメソッドがあります。

使用法は

BigInteger result = BigInteger.valueOf(x).modPow(BigInteger.valueof(y), BigInteger.valueOf(n));

ちなみに、変数 a は小文字で名前が付けられています(n私の場合)。

于 2013-07-05T10:45:47.190 に答える
0

あなたの答えは正しいです。しかし、電卓が提供する価値は計算ではなく、交換された鍵です。そして、あなたの答えは、送信者または受信者から見た公開値を指します

于 2013-07-05T10:48:41.100 に答える