Simple Substitution Cypherを実装するアプリケーションを開発しています。今やスピードの理由から(それが条件の1つであったため)、暗号化と復号化にBitArrayを使用する必要があります。ユーザーは "コード化された"アルファベットを入力し、何らかの方法でマップする必要があるので、ユーザーがデータにアクセスするときにハッシュテーブルを使用し、O(1)の複雑さがあるため、Dictionaryを選択しました。しかし、今私は自分自身がどのように思っていた私が持っているとき、私はこれを行うことができ、このように初期化されたアルファベット「コード化」:これは私が私の目標を達成するためにループの2を使用するだろうDictionaryを使用してBitArrayにバイトをマップする
BitArray codedAlphabet = new BitArray(bytes);
を。誰か別のアイデアを持っていますか?うまくいけば、あなたは私が達成しようとしていることを理解しています。前もって感謝します。
コード:
namespace Harpokrat.EncryptionAlgorithms
{
// Simple substitution cypher algorithm
public class SimpleSubstitutionStrategy : IEncryptionStrategy
{
private string alphabet; // message to be encrypted
private string coded; // this will be the key (input from file or from UI)
private ArrayList AlphabetBackUp = new ArrayList();
private ArrayList CodedBackUp = new ArrayList();
#region Properties
public string Alphabet
{
get
{
return this.alphabet;
}
set
{
this.alphabet = value;
foreach (char c in this.alphabet.ToCharArray())
{
this.AlphabetBackUp.Add(c);
}
}
}
public string Coded
{
get
{
return this.coded;
}
set
{
this.coded = "yqmnnsgwatkgetwtawuiqwemsg"; //for testing purposes
foreach (char c in this.coded.ToCharArray())
{
this.CodedBackUp.Add(c);
}
}
}
#endregion
public string Decrypt(string message)
{
message = message.ToLower();
string result = "";
for (int i = 0; i < message.Length; i++)
{
int indexOfSourceChar = CodedBackUp.IndexOf(message[i]);
if (indexOfSourceChar < 0 || (indexOfSourceChar > alphabet.Length - 1))
{
result += "#";
}
else
{
result += alphabet[indexOfSourceChar].ToString();
}
}
return result;
}
public string Encrypt(string message)
{
message = message.ToLower();
string result = "";
for(int i = 0; i < message.Length; i++)
{
int indexOfSourceChar = AlphabetBackUp.IndexOf(message[i]);
if (indexOfSourceChar < 0 || (indexOfSourceChar > coded.Length - 1))
{
result += "#";
}
else
{
result += coded[indexOfSourceChar].ToString();
}
}
return result;
}
}
}
代替チップが必要な場合は、なぜBitArrayを使用しますか?それは1文字のレベルで動作するので、少なくともバイトレベルで動作します。実際にどのように暗号化しているかのコードを入力してください。 – Evk
現在、私はバイトレベルで暗号化しています。私は規則的な "コード化された"アルファベットの配列リストを持っているので、さらに最適化したかったのです。編集した質問のコードを見つけてください。 – nikjov92
'Dictionary 'を使うのは正しい方法ですが、' BitArray'を使う必要はありません。なぜなら、あなたはシングルビットのレベルで操作する必要がないからです。それを使用すると、コードを複雑にするだけで利益が得られません。 – Evk