1

私は El Gamal 暗号システムで遊んでいます。私の目標は、長い一連のテキストを暗号化および解読できるようにすることです。

El Gamal では、平文が整数である必要があります。String の .getBytes() メソッドを使用して文字列を byte[] に変換し、byte[] から BigInteger を作成しました。暗号化/復号化の後、BigInteger の .toByteArray() メソッドを使用して BigInteger を byte[] に変換し、byte[] から新しい String オブジェクトを作成します。

1035 ビットのキーを使用していますが、これは最大 129 文字の文字列を暗号化/復号化するときに完全に機能します。130 文字以上の場合、解読メソッドから生成される出力が文字化けします。

誰かがこの問題を解決する方法を提案できますか?

4

4 に答える 4

6

ElGamal では、RSA と同様にモジュラスより大きい値を暗号化することはできません。

于 2010-05-15T13:36:18.803 に答える
0

あなたが試すことができます

BigInteger pText = new BigInteger(plaintext.getBytes("UTF-8"));

エンコード/デコードと暗号化/解読をより対称にするためですが、それが根本的な原因であるかどうかはわかりません.

ところで、黙ってException. 最低限できることは、catch (UnsupportedEncodingException e).

于 2010-05-15T03:20:52.687 に答える
0

操作には正の数を使用する必要があります。したがって、次のように BigInteger を構築する必要があります。

BigInteger pText = new BigInteger(1, plaintext.getBytes());
// 1: select a random integer k such that 1 <= k <= p-2
BigInteger k = abs(new BigInteger(p.bitLength() - 2, sr));
于 2010-05-15T04:00:18.660 に答える
0

非対称暗号アルゴリズムを使用して特定のデータを暗号化したい場合、これは非常に短いデータ ブロックに対してのみ実行できます。その理由は、「技術的」(アルゴリズムがこのように機能する) と「実用的」(非対称暗号化が遅い) の両方です。

非対称暗号アルゴリズムを使用して大きなデータ ブロックを暗号化する正しい方法は、

  1. いくつかの対称アルゴリズム (AES、RC4、3DES など) のランダム (「セッション」) キーを生成します。
  2. このアルゴリズムを使用してデータを暗号化します
  3. 非対称アルゴリズムを使用してセッション キーを暗号化します
  4. 暗号化されたキーをデータの近くに保存します。
  5. 車輪の再発明をやめる
于 2010-05-15T15:28:46.953 に答える