我有一个程序可以检查数以百万计的结果以强制使用3DES密码,但是我希望它向我显示正确的密码,而不是数以百万计的乱码结果,所以我在考虑摆脱结果的方法使用非ASCII字符,并尝试使用ifs like。
//检查可能在去杂字的文本上出现的单词,删除ASCII只会使它更容易,但是在我的情况下,结果也确实有3个多余的ascii,所以我们不能那样做,但是通常应该可以。
if(decryptedText.Contains("WORDS")||...lots)
{
Console.WriteLine(key);
Console.WriteLine("Correct Text ="+decryptedText);
}
我还尝试将其全部转换为ASCII,但是由于正确的结果在末尾具有3个冗余的非ASCII字符,因此它提供了几乎相同和相同的数百万个结果。
var textoLimpio = LimpiarASCII.ReturnCleanASCII(decryptedText);
您正在做大量的字符串操作。每个字符串更改都会占用一点内存。
首先,如果要保留结构,则应从ArrayList
切换到List<int>
以包含猜测列表,并且仅当将密钥串传递给解密函数时,才必须使用字符串。另外,切勿在现代编程中使用ArrayList
,该类存在的唯一原因是与旧代码的向后兼容性。如果确实需要一个可以接受任何内容的列表,请使用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();
}
}
}