2

私はこのコードに出くわしました:

バイトヴィジュネル暗号、復号化のエラー

しかし、ルールに従おうとして、私はそれについて新しい質問をしました。

次のアルゴリズムが使用されており、私はそれをよりよく理解しようとしています。

Byte[] result= new Byte[plaintext.Length];

key = key.Trim().ToUpper();

int keyIndex = 0;
int keylength = key.Length;

for (int i = 0; i < plaintext.Length; i++)
{
    keyIndex = keyIndex % keylength;
    int shift = (int)key[keyIndex] - 65;
    result[i] = (byte)(((int)plaintext[i] + shift) % 256);
    keyIndex++;
}

Unicodeの場合と同じように、キーをトリミングする必要があると私は考えていますか?したがって、大文字から65を引くと、共通の文字/記号が生成されますか?

4

1 に答える 1

1

大文字のAのASCII値は65です。のすべての文字はkey大文字に変換されます。これにより、の各文字のアルファベット順のインデックスが返されkeyます。

の各文字はkeyその方法で数値に変換され、元の文字列の各文字はその位置の数だけ「アルファベットを上にシフト」されます。

キーがだった場合BAD、これは1、0、3の数字に変わり、次のように「helloworld」に適用されます。

Hello world
10310310310 <-- added to each character
Ieomo#xoumd

このコードを自分のコードの下に追加することで、これを実証できます。

StringBuilder demonstration = new StringBuilder();
foreach (byte b in result)
{
    demonstration.Append((char)b);
}
Console.WriteLine(demonstration.ToString());
于 2012-11-25T16:30:25.490 に答える