避免在长程序中超载RAM

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

我有一个程序可以检查数百万个结果以强制使用3DES密码,但是Windows在其中崩溃,由于我的计算机功能不够强大,我花了很多时间才能完成但无法完成为了避免这种重载?每次加载程序都要花几个小时才能导致程序崩溃。

*被注释的部分是我为解决此问题而进行的尝试,或者仅是有关代码的注释。

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)
        {
            //FileStream ostrm;
            //StreamWriter writer;
            //TextWriter oldOut = Console.Out;
            //try
            //{
            //    ostrm = new FileStream("./Redirect.txt", FileMode.OpenOrCreate, FileAccess.Write);
            //    writer = new StreamWriter(ostrm);
            //}
            //catch (Exception e)
            //{
            //    Console.WriteLine("Cannot open Redirect.txt for writing");
            //    Console.WriteLine(e.Message);
            //    return;
            //}
            //var text = "My Sample Text to Test DES from C#";
            // var encryptedText = ClsTripleDES.Encrypt(text);

            //Console.SetOut(writer);

            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");
            ArrayList posiblesClves3 = new ArrayList();
            ArrayList solucionesDecrypt = new ArrayList();
            for (int i = 0; i <= 16777215; i++) //16777215
            {

                string hexValue = i.ToString("X").PadLeft(6, '0');

                //Console.WriteLine(hexValue); esto es para ver como va generando todas las posibilidades desde 000000 a FFFFFF

                // voy añadiendo cada combinacion al array ( parte que tengo + lo generado )
                string posibleClave3 = hexValue;
                posiblesClves3.Add(posibleClave3);

                // Paro el for en F F F F F F, por si acaso 16777215 es mas de lo necesario.
                if (hexValue == "FFFFFF")
                {
                    i = 16777215;

                }
            }
            // realizo un for eache que me imprima por consola todas las posibles claves qu hemos guardado en el arrayList
            Console.WriteLine(" El array de posibles claves3 -->   posiblesClves3 : \n[ ");
            foreach (string posibleClave3 in posiblesClves3)
            {
                Console.Write(posibleClave3 + ",");
            }
            Console.WriteLine(" ] ");
            Console.ReadLine();//stop
            // para ver que se han añadido todas imprimo la 1 y la ultima del array .
            Console.WriteLine(" primera pos array : " + posiblesClves3[0]);
            int numMas = (posiblesClves3.Count) - 1;
            Console.WriteLine(" ultima pos array : " + posiblesClves3[numMas]);
            Console.WriteLine(" total posciones array : " + posiblesClves3.Count);
            Console.ReadLine();//stop
            foreach (string posibleClave3 in posiblesClves3)
            {
                var decryptedText = ClsTripleDES.Decrypt(encryptedText, posibleClave3);
                solucionesDecrypt.Add(decryptedText);
                //Console.WriteLine("After Decryption Text = " + decryptedText + "/n");
                //Console.SetOut(oldOut);

            }
            foreach (string decryptedText in solucionesDecrypt)
            {
                Console.WriteLine("After Decryption Text = " + decryptedText + "/n");
            }
                //writer.Close();
                //ostrm.Close();
                //Console.WriteLine("Done");
                //Console.ReadLine();//stop
                Console.WriteLine("EL PROGRAMA HA ACABADO");
            //for (int i = 0; i <=4 ; i++) //16777215
            //{

            //    string hexValue = i.ToString("X").PadLeft(6, '0');


            //    var decryptedText = ClsTripleDES.Decrypt(encryptedText, hexValue);
            //    //Console.WriteLine("Before Encryption Text = " + text);


            //    //if (!decryptedText.Contains("&") && !decryptedText.Contains("?")) {
            //    Console.WriteLine("van por:"+i+"/n hexa:"+hexValue);
            //    Console.WriteLine("After Decryption Text = " +decryptedText + "/n");
            //    Console.SetOut(oldOut);
            //    Console.ReadLine();
            //    //}
            //    //Console.ReadLine();
            //    // Paro el for en F F F F F F, por si acaso 16777215 es mas de lo necesario.
            //    if (hexValue == "FFFFFF")
            //    {
            //        //i = 16777215;
            //        Console.WriteLine("/n" + "/n" + "FIN DE LAS VARIABLES" + "/n" + "/n" + "/n");
            //        Console.Beep();


            //    }


            //}

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

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

首先,如果要保留结构,则应从ArrayList切换到List<int>以包含猜测列表,并且仅当将密钥串传递给解密函数时,才必须使用字符串。另外,切勿在现代编程中使用ArrayList,该类存在的唯一原因是与旧代码的向后兼容性。如果确实需要一个可以接受任何内容的列表,请使用List<object>代替,但使用List<int>List<string>这样的特定列表会更好。

© www.soinside.com 2019 - 2024. All rights reserved.