仅从数百万个字符串中选择一个[已解决]

问题描述 投票:-1回答:1

我有一个程序可以检查数以百万计的结果以强制使用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);

example of a gibberish result

c# overloading ram 3des
1个回答
0
投票

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

首先,如果要保留结构,则应从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();
        }
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.