用C#制作一个密码字典,自动列决一个单词的变形,比如password,列决出passw0rd PassWord等等。请问有没有思路?

解决方案 »

  1.   

    password,列决出passw0rd PassWord,如果是仅仅这样的话,可以定义一个函数,随机的对单词的某一位进行ToUpper操作。
      

  2.   

    枚举相近的单词:using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Text;
    using System.Text.RegularExpressions;
     
    namespace ConsoleApplication1
    {
        class Program
        {
            static void Main(string[] args)
            {
                List<List<char>> simchr = new List<List<char>>()
                { 
                    new List<char>() { '0', 'o' },
                    new List<char>() { '2', 'z' },
                    new List<char>() { 'g', 'q', '9' }
                };
                string source = "22az9";
                string source1 = string.Join("", source.Select((x, i) => simchr.Any(y => y.Any(z => z == x)) ? "{" + simchr.Single(y => y.Any(z => z == x)).FirstOrDefault() + ":" + i.ToString() + "}" : x.ToString()));
                IEnumerable<string> query = new string[] { source1 };
                while (Regex.IsMatch(query.First(), @"\{\w:\d+\}"))
                {
                    string s = Regex.Match(query.First(), @"\{(\w):\d+\}").Value;
                    string c = Regex.Match(query.First(), @"\{(\w):\d+\}").Groups[1].Value;
                    query = query.SelectMany(x => simchr.First(y => y.First().ToString() == c).Select(y => x.Replace(s, y.ToString())));
                }
                foreach (var item in query)
                {
                    Console.WriteLine(item);
                }
            }
        }
    }22a2g
     22a2q
     22a29
     22azg
     22azq
     22az9
     2za2g
     2za2q
     2za29
     2zazg
     2zazq
     2zaz9
     z2a2g
     z2a2q
     z2a29
     z2azg
     z2azq
     z2az9
     zza2g
     zza2q
     zza29
     zzazg
     zzazq
     zzaz9
     Press any key to continue . . .http://bbs.csdn.net/topics/390352804其余的自己完善。