2017-07-05 11 views
0

私は文字列を暗号化し、シーザアルゴリズムを使用して を復号化するWindowsフォームアプリケーションを持っています。文字列を暗号化するときには、スペースを削除する必要がありますが、再度解読するときは、削除したスペースを実際の場所に戻す必要があります。文字列から削除されたスペースを戻す方法

私はこのケースで直面した問題は、暗号化された文字列から削除された空間をもたらすとも一部の文字がある復号化する際には、暗号化キーは3である。このパターンなどの特殊文字に変更されている。

プレーンテキスト:私の名前はShafaqザヒールはある
暗号化されたテキスト:PbqdphlvVkdidtCdklu
復号文:M_nameisShafaq @これが私のコードである

アアー

class CaesarAlgorithm 
    { 
     public string Encrypt(string pt,int key) 
     { 
      char[] buffer = pt.Replace(" ",string.Empty).ToCharArray(); 
      //char[] buffer = pt.ToCharArray(); 
      for(int i=0;i<buffer.Length;i++) 
      { 
       if (buffer[i] >= 'a' && buffer[i] <= 'z') 
       { 
        buffer[i] = (char)(buffer[i] + key); 
        if (buffer[i] > 'z') 
        { 
         buffer[i] = (char)(buffer[i] - 26); 
        } 
       } 
       else if (buffer[i] >= 'A' && buffer[i] <= 'Z') 
       { 
        buffer[i] = (char)(buffer[i] + key); 
        if (buffer[i] > 'Z') 
        { 
         buffer[i] = (char)(buffer[i] - 26); 
        } 
       } 
      } 

      return new string (buffer); 

     } 

     public string Decrypt(string pt,int key) 
     { 
      char[] buffer = pt.ToCharArray(); 
      for (int i = 0; i < buffer.Length; i++) 
      { 
       if (buffer[i] >= 'a' && buffer[i] <= 'z') 
       { 
        buffer[i] = (char)(buffer[i] - key); 
        if (buffer[i] > 'z') 
        { 
         buffer[i] = (char)(buffer[i] - 26); 
        } 
       } 
       else if (buffer[i] >= 'A' && buffer[i] <= 'Z') 
       { 
        buffer[i] = (char)(buffer[i] - key); 
        if (buffer[i] > 'Z') 
        { 
         buffer[i] = (char)(buffer[i] - 26); 
        } 
       } 
      } 

      return new string(buffer); 
     } 
    } 
} 
+3

私はあなたの機能が「ObfuscateAndDestruct」と「PartiallyReconstructWithFaults」と呼ばれる方が良いと思います。自分で暗号化を試みることは絶対にやめてください。初心者のミスをしなくてもうまくいくライブラリを常に見つけてください。 –

答えて

0

を持つことができない理由だけで不思議と、このコード

if (buffer[i] > 'Z') 
{ 
buffer[i] = (char)(buffer[i] - 26); 
} 

はあなた暗号解読機能で

if (buffer[i] <'A') 
{ 
buffer[i] = (char)(buffer[i] + 26); 
} 

すべきではありませんか? Aまたはaより小さいかどうかを確認するには、そのキーからキーを減算しているためです。 また、コード内のスペースを置き換えないでください。それらを暗号化して解読するだけで、インデックス情報を保持しない限り、スペースを回復する方法はありません。

+0

はい、私が作った間違いであり、あなたが私に気づかせてくれました。ありがとう、そして、あなたが私に感謝するだろう、取り除かれたスペースを取り戻すための解決策を提案できれば –

0

私が正しいと思う唯一のことは、オリジナルのchar配列をループして各スペースのインデックスを保存してから最後に追加することです。ちょっと目を覚まして、おそらくもっと良い解決策があるはずです。また、あなたは、スペース

+0

これは教授によって与えられた課題にお勧めしました –

+0

問題は、OP自身の "暗号化"と "解読"機能です。任意の文字のインデックスを保存することはまったく役に立ちません。これらのインデックスはどこに保存されますか? –

+0

Idスペースを、使用頻度の低いオプションの特定の文字に変更してから、戻しやすくします。 – BugFinder

関連する問題