Select 数百万中的一个字符串 [已解决]

Select just one string from millions [Solved]

我有一个程序可以检查数百万个结果以暴力破解 3DES 密码,但我希望它只显示正确的结果而不是数百万个乱码结果,所以我在想办法摆脱非 ASCII 字符的结果并尝试使用 ifs 之类的。

[对我有用的可能解决方案]

//检查可能出现在描述文本中的单词,删除 ASCII 只是让它更容易,但在我的情况下,结果确实还有 3 个多余的 ascii 作为额外的所以我们不能那样做,但它应该正常工作。

if(decryptedText.Contains("WORDS")||...lots)
{
   Console.WriteLine(key);
   Console.WriteLine("Correct Text ="+decryptedText);
}

我也尝试将其全部转换为 ASCII,但它给出了几乎相同且相同数量的数百万个结果,因为正确的结果在末尾有 3 个冗余的非 ASCII 字符。

var textoLimpio = LimpiarASCII.ReturnCleanASCII(decryptedText);

example of a gibberish result

您正在进行大量的字符串操作。每个字符串更改都会占用一点内存。

首先,如果您想保留结构,您应该从 ArrayList 切换到 List<int> 以包含您的猜测列表,并且仅在您传递密钥字符串时被迫使用字符串到解密功能。此外,切勿将 ArrayList 用于现代编程,class 存在的唯一原因是为了与旧代码向后兼容。如果您真的必须有一个可以接受任何内容的列表,请改用 List<object>,但使用 List<int>List<string> 等特定列表效果更好。

然而posiblesClves3是完全没有必要的,你可以将解密代码放在for循环中。您还可以在 for 循环中与数字 0xFFFFFF 进行比较,而无需进行字符串比较。您也可以使用 .ToString("X6") 而不是 .ToString(X).PadLeft('0',6),这样可以为每个循环节省一个额外的字符串。

这是一个非常精简的代码版本,使用了尽可能少的字符串。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.IO;
using System.Collections;

namespace ProyectoEspiasSergioSolorzanoAriste
{
    class Program
    {
        static void Main(string[] args)
        {
            var encryptedText = "7iuYS0z/aIp/f+dNjJCkLULBY+3K5F3B4BYBSNoKEc0g8M3lcFFECqHMb2E9rv12sUCjJA/ve1uCxGNL/feZjEFBpANh0tAs/5+97+L+kuL0wZI78Ux40XhEbyTSIoEfGY4GsM7uce7PzZ1sYSb9Kql/0j6Qu9RGWXqJMPF9XYYv5FxgNLJ8y8bzoGcZVf6h7k95a5YoX6KP9T20TMPJcqUf+nEYTo2Y54K6vU8pAUC0UxTnLlxakzCT+QBIhXl0SRS6/36rbkSppNYd0GLq5HRN+/BEFvGF+0p9fRZQ5hyqEmy8OEFqFtSBeA0LotyszSHq1ZqJA56rqXjoSZZm6ljcITolbx101eNH7x0S1zjzNv1dovIsaONQfbt6ZUlldxFDSVrQrTrsso32LIO8JWGsUCp6mc8VhL5hAA8xY7d8cwSoDzlm7+46fqP6pEnL/dArS9As+vE6ZWh+JYmDQJ5pEs2KDEVTQb5o4rFB79QE8EmmysvsC23baZXsO5Qa1GqeMcUZ2mORTHUs1GTKhqY1DpOGtXbykpXs+0RlmNzvIEASf5yOqOnHOvhzxGGzjvrEiAc61t6DB/frmGlokVZEuZcziwcb883jCRwXOb21R/AtCaf4A1VHbVq/xoeS/XRExgOle6xZGibNMUHrvprtnj9Hhdwz4H0p6m6T3sR6GAzhzAl12MzMdG4VM6QFJsSND5nNQRlHByYTZ5ebWTupKbSIDPCaOu4FydZuJj4=";
            Console.WriteLine("After Encryption Text = " +
                   encryptedText + "/n");
            var solucionesDecrypt = new List<string>(0xFFFFFF); //Presize the list to hold all the values.


            for (int i = 0; i <= 0xFFFFFF; i++)
            {
                var decryptedText = ClsTripleDES.Decrypt(encryptedText, i.ToString("X6"));
                solucionesDecrypt.Add(decryptedText);

            }
            foreach (string decryptedText in solucionesDecrypt)
            {
                Console.WriteLine("After Decryption Text = " + decryptedText + "/n");
            }
            Console.ReadLine();
        }
    }
}