我刚刚开始使用C#进行编码,并给自己做了一个创建代码的练习,该代码可以帮助用户找到一组输入字符的可能组合以练习“密码”(这不是模仿蛮力的代码)强制代码,而不是密码猜测者,尽管我猜它们是相似的)。 目前,我的代码最多可以包含5个字符,并且可以锻炼所有可能的排列,但是一旦用户完成了许多操作,这就不是很有用了。我想添加一个依赖于用户知识的复杂程度,可以说用户知道“密码”的某些顺序,例如第一个字母是某个字符,而第三个字母是另一个字符。
例如。假设用户输入了5个字符:a,b,c,d,e,并且实际密码已被“敲除”,则代码将输出a,b,c,d,e的每种可能性。但是可以说用户知道第一个字母是“ b”,第三个字母是“ c”。因此,代码会将产生的可能性缩小到符合此条件的可能性。
我不知道如何实现将首先读取排列的所有组合的东西。其次,确定哪些排列与用户知道的顺序匹配。第三)列出符合标准的排列结果。
using System;
using System.ComponentModel;
using System.Linq;
using System.Reflection.PortableExecutable;
using System.Runtime.InteropServices;
namespace cracker
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Please enter your first character");
var firstCharacter = Console.ReadLine();
Console.WriteLine("Please enter your second character");
var secondCharacter = Console.ReadLine();
Console.WriteLine("Please enter your third character");
var thirdCharacter = Console.ReadLine();
Console.WriteLine("Please enter your fourth character");
var fourthCharacter = Console.ReadLine();
Console.WriteLine("Please enter your fifth character");
var fifthCharacter = Console.ReadLine();
if (fifthCharacter == "na")
{
var combo = firstCharacter + secondCharacter + thirdCharacter + fourthCharacter ;
var q = combo.Select(x => x.ToString());
int size = 4;
for (int i = 0; i < size - 1; i++)
q = q.SelectMany(x => combo, (x, y) => x + y);
foreach (var item in q)
Console.WriteLine(item);
}
else
{
var alphabet = firstCharacter + secondCharacter + thirdCharacter + fourthCharacter + fifthCharacter;
var q = alphabet.Select(x => x.ToString());
int size = 5;
for (int i = 0; i < size - 1; i++)
q = q.SelectMany(x => alphabet, (x, y) => x + y);
foreach (var item in q)
Console.WriteLine(item);
}
}
}
}
请输入您的第一个字符 一种 请输入第二个字符 b 请输入您的第三个字符 C 请输入您的第四个字符 d 请输入您的第五个字符 Ë aa aa aa aa aa 阿阿巴 亚伯 aaabc a aa 阿阿卡 ac 协会 ac Aaace 阿阿达 aaadb aadc 阿阿德 aaade
为简便起见,我没有复制其余的可能性,但是您可以想象列表很长
我只编码了10天左右,所以请注意,如果我的代码不符合您的标准;)