1

ライブラリなしで独自のRSA暗号化を作成したい!

コード:

import java.util.Random;

public class Main {

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

private static byte encrypt(byte message) {
    double p = createPrime();
    double q = createPrime();
    double e = 2 ^ new Random().nextInt(100) % (p * q);
    byte ciphered = Math.pow(message, e);
    return ciphered;
}

private static double createPrime() {
    double testPow;
    do {
    int test = new Random().nextInt(20);
    int power = new Random().nextInt(20);
    test += 1;
    power +=1;
    testPow = Math.pow(test, power);
    System.out.println("Double Math.pow: " + testPow);
    } while (!testPrime(testPow));
    return testPow;
}

private static Boolean testPrime(Double test) {
    int factor = 2;
    int lastFactor = 1;
    while (test > 1) {
        if (test % factor == 0) {
            lastFactor = factor;
            test /= factor;
            while (test % factor == 0) {
                test /= factor;
            }
        }
        factor++;
    }
    Boolean isPrime = false;
    if (test == lastFactor) {
        isPrime = true;
    }
    return isPrime;
 }
}

これは私が暗号化するために持っているものです。これを修正するために何をすべきかわかりませんが、これを試す前に、ほとんど手作業でこれを行っています。

したがって、暗号化する式はc = m ^ e(mod N)であり、復号化はm = c ^ d(mod N)であることがわかります。

ここで、p、qは素数です-mはメッセージです-cは暗号化されたテキストです-eはNのトーティエントです-Nはqのp倍です-Nのトーティエントは(p-1)(q-1)です

どんな助けでも大歓迎です

4

4 に答える 4

4

最初に行うことは、クラス java.math.BigInteger を確認することです。このクラスは、"School-book" RSA を実装するのに大いに役立ちます。

于 2011-02-26T22:01:29.407 に答える
2

あなたは本当の質問をしていませんが、とにかくいくつかの問題があります


double e = 2 ^ new Random().nextInt(100) % (p * q);

これが何をすべきかはわかりませんが、間違っています。Math.Pow()ではなくということ^ですか?eいずれにせよ、通常、暗号化を高速化する ために、設定ビットが非常に少ない小さな定数を使用するだけです。e=3またはe=65正常に動作します。

秘密鍵 ( ) を計算しておらず、公開鍵 ( 、 ) をd保存していないようにも見えます。ep*q

大きな数を使い始めるintと、double(??) はそれらを保持できなくなります。BigInteger代わりに使用してください。


do {
    testPow = Math.pow(test, power);
} while (!testPrime(testPow));

の場合power > 1、testPow は素数になることはありません...


は見ていませんがtestPrime()、簡単な単体テストを記述して、おそらく動作するかどうかを確認できるはずです。

于 2011-02-26T21:55:22.330 に答える
1

java.securityJavaには、パッケージに暗号化アルゴリズムが組み込まれています。これを確認してください。したがって、外部ライブラリは必要ありません。自分で実装する必要はないと思います。宿題の場合のみ(タグ付けしていません)

于 2011-02-26T20:08:42.927 に答える
1

BouncyCastle などの参照用に既存の実装を読んだりコピーしたりすることをお勧めします: http://www.docjar.com/html/api/org/bouncycastle/crypto/engines/RSACoreEngine.java.html

ちなみに、これを完全に安全にしたい場合は、java.util.Random ではなく、java.security.SecureRandom を使用する必要があります。

于 2011-02-26T22:10:51.373 に答える