我在c#表单中制作一个简单的混淆器,并且我使用此代码插入它:
string a = RandomString(8);
string b = RandomString(8);
string c = RandomString(8);
string d = RandomString(8);
etc...
Code.Text = Code.Text.Insert(0, "set " + a + "=a\n" + "set " + b + "=b\n" + "set " + c + "=c\n" + "set " + d + "=d\n" etc...);
这是输出:
set pbatbpkz=a
set aqtwbqlg=b
set hitsvkvc=c
set imuwqdfy=d
etc...
我需要将随机字符串分开,以便稍后我可以插入代码来替换像#34; a"用字符串a。
这显然看起来不高效或专业。我对c#很新,所以我不知道如何制作类似数组的内容来插入这个文本块。
这里有更好的代码:
Dictionary<char, string> strDict = new Dictionary<char, string>();
for (int i = 0; i < 26; i++)
{
if (!strDict.ContainsKey((char)(i + 97)))
{
strDict.Add((char)(i + 97), RandomString(8));
}
else
{
strDict[(char)(i + 97)] = RandomString(8);
}
}
string letterTable = "abcdefghijklmnopqrstuvwxyz";
StringBuilder obfuscationTable = new StringBuilder("");
foreach (char c in letterTable)
{
obfuscationTable.AppendLine("set " + c + "=" + strDict[c]);
}
Code.Text = Code.Text.Insert(0, obfuscationTable.ToString());
答案 0 :(得分:2)
一种方法是使用词典。
Dictionary<char, string> strDict = new Dictionary<char, string>();
for (int i = 0; i < 26; i++)
{
if(!strDict.ContainsKey((char)(i+97)))
{
strDict.Add((char)(i + 97), RandomString());
}
else
{
strDict[(char)(i + 97)] = RandomString();
}
}
这将用随机字符串填充你的strDict,可以使用从'a'到'z'的字符访问 然后你得到这些字符串:
string strA = strDict['a'] //and so on
答案 1 :(得分:0)
我认为您正在寻找的结构是Dictionary<char, string>
天真地你会像这样使用它:
var charLookup = new Dictionary<char, string>{
{'a', RandomString(8)},
...
{'z', RandomString(8)},
};
Code.Text = Code.Text.Insert(0, "set " + charLookup['a'] + "=a\n" ....
有很多方法可以用更少的代码来编写它。我建议使用循环来填充你的字典,并使用linq来生成你的字符串。
您应该可以在3行代码中执行此操作。
或者使用种子随机数生成器在一行中执行此操作。
答案 2 :(得分:0)
您可以使用将这些字符映射到随机字符串的字典。
Dictionary<string, string> RandomStringDictionary = new Dictionary<string, string>();
RandomStringDictionary.Add("a", RandomString(8));
...
RandomStringDictionary.Add("z", RandomString(8));
然后迭代你的文字,并为每个角色做
RandomStringDictionary[CurrentCharacter]