2012-04-03 13 views
0

これは十分に具体的ではないようです。ASCII用のJava正規表現の範囲

P = 263Q = 587、公開鍵E = 683と秘密鍵D = 81599.したがってN = PQ = 154381とRSAシステムを考えます。

  • 任意の文字を変換する(院生を:メッセージについては、次のように暗号化が行われ、「私は学生です」と言います空白スペース)を3桁のASCIIコード、すなわち073 032 065 077 032 065 032 083 084 085 068 069 078 084
  • ブロックを形成するために2つの隣接するASCIIコードを1つずつ結合します。つまり、073032 065077 032065 032083 084085 068069 078084.(最後の文字に何も参加していない場合は000を使用します)。暗号化アルゴリズムを使用して
  • C = メートルE MOD Nすべてのブロックを暗号化します。 = 103300 C = 73032 モッズ154381など

は、メッセージの受信されているとします。33815872282353670979238213794429016637939017111351.内容は何ですか?

もう少し検討した後、私は部分的にデコードする必要がある、つまり33815を次にデコードしなければならないと考えています。87228など、デコードされた部分を半分に分割し、半分はアスキー範囲にあり、そうでない場合は元に戻ってそれを別々に分割します。これは正規表現で何かをハックしようとするよりも良い解決策のように聞こえますか?

P.S.デコードは宿題であると私は手作業で行い、メッセージは "暗号が嫌い"(私の講師はユーモアのセンスがあるようです)ので、私は宿題を手助けしていません。これをプログラムに変えることは、面白いかもしれないと思う余分なカリキュラムに過ぎません。

+4

RSAで達成しようとしていることをもう少し説明できますか?私たちはあなたの正規表現であなたを助けることができますが、私はこれの上に何かもっと間違っていると感じています。そのエラーを修正すると、上記の複合ソリューションの必要性が排除される可能性があります –

+0

私は自分でRSAを直接使用したことはありませんが、文字を戻す正しいパスであるとは想像できません。 – stema

+0

RSAはメッセージを 'byte []'にデコードしませんか?英数字の 'String'表現にデコードするケースはありません。関連付けられた 'String'を元に戻すために' new String(bytes) 'を実行できるはずです。 – Gray

答えて

0

delimeterやインデックスなしで可変長レコードを作成することは、一般的に非常に悪い考えです。この場合、最善の方法は固定幅の整数で、先頭にゼロを付けることです。

つまり、スキップせずに常に文字列の最初から最後まで読み込んでいると仮定すると、実際には暗黙的な区切り文字があります。あなたが3桁の数字であることを示すために0または1をとり、2桁の数字を示すために2-9をとる場合。このような何かが働くだろう:

[01][0-9][0-9]|[2-9][0-9]

しかし、実際に - ちょうど先行ゼロの文字列に自分の番号を印刷します。また、スペースが心配な場合は、2文字の16進数のエンコーディングを調べてください。またはベース64、または他の印刷可能なエンコーディングの1つ。