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();
}
}
}
我有一个程序可以检查数百万个结果以暴力破解 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();
}
}
}