VS2019のコードをコピペしました。
using System;
namespace Chapter01All
{
class Encode
{
static void Main()
{
string msg = "This is a test";
string encmsg = "";
string decmsg = "";
string key = "abcdefgi";
int j;
Console.Write("Original message: ");
Console.WriteLine(msg);
// メッセージの暗号化 ここの部分だけ考えました。
int i;
for ( i = 0; i < msg.Length; i = i + 8)
{
int k; int n;
for (k = 0; i + k < msg.Length; k++)
{
n = i + k;
encmsg = encmsg + (char)(msg[n] ^ key[k]);
//j++;
if (k == 7) break;
}
}
Console.Write("Encoded message: ");
Console.WriteLine(encmsg);
// メッセージの復号化 ここの部分は本のままです。
j = 0;
for ( i = 0; i < msg.Length; i++)
{
decmsg = decmsg + (char)(encmsg[i] ^ key[j]);
j++;
if (j == 8) j = 0;
}
Console.Write("Decoded message: ");
Console.WriteLine(decmsg);
}
}
}
本の通りだと、暗号化の部分とデコードの部分が同じルーティンなんですが、二重ループで書いてみました。演算子「Λ」は排他的論理和というようです。2度繰り返すと元に戻るそうです。この場合のkeyは同じものです。