2

だから、Javaを使ってRSAパスワードの公開鍵を見つけます。現在、自分が何をしているのか、それが正しいのかどうかもわかりません。

公開鍵に関するこの情報があります。

C = 5449089907 
n = p*q = 8271344041 
q = 181123
p = n/q = 45667
d = 53
phi(n) = (p-1)(q-1) = 8271117252

物事を複雑にしているのは BigInteger です。int と long の数値は非常に大きいため、ぎこちない BigInteger を使用する必要があります。私が理解している限り、次の方程式を解く必要があります。

e*5198987987 - x*8271117252 = 1

euklidske アルゴリズムを使用して解決しようとしています。Javaでは、次の方法を使用できると思います:

phi(n) = 8271117252 および d = 53 に基づいてコードを作成します。次に、for ループで gcd を使用し、for ループから phi(n) の gdc に i 個の数値を試行します。結果が 1 の場合、i を i の反復回数に設定します。次に、e と phi(n) に対してモジュラス逆関数を使用します。これが phi(n) に等しい場合にのみ、答えが得られました。(私は、それが得るのと同じくらい間違っているかもしれないと思います)。

とにかく、ここにコードがあります。一般的に、どんな入力も私を少し狂わせるほど素晴らしいものです。

import java.math.BigInteger;
public class RSADecrypt {

    BigInteger p = new BigInteger("53"); // Input privatekey.
    BigInteger r = new BigInteger("8271344041");
    BigInteger variabel_i;
    BigInteger modinv;
    BigInteger e;

    public RSADecrypt () {

        for (BigInteger bi = BigInteger.valueOf(1000000000);
                bi.compareTo(BigInteger.ZERO) > 0;
                bi = bi.subtract(BigInteger.ONE)) {

            if(gcdThing(bi).equals(BigInteger.ONE))
                e = bi;

                  if(modinv(e) == p) {
                    System.out.println(" I er "+ bi);
            } 
        }

        System.out.println("Ikke noe svar for deg!");       
    }


    // Gcd funksjon.
    public BigInteger gcdThing(BigInteger i) {
        BigInteger b2 = new BigInteger(""+i);
        BigInteger gcd = r.gcd(b2);
        return gcd;
    }

    // Modinverse
    public BigInteger modinv (BigInteger e2) {
        variabel_i = new BigInteger(""+e2);
        modinv = r.modInverse(variabel_i);
        return modinv;
    }

}
4

0 に答える 0