我有一个程序可以检查数百万个结果以强制使用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();
// }
//}
}
}
}
您正在做大量的字符串操作。每个字符串更改都会占用一点内存。
首先,如果要保留结构,则应从ArrayList
切换到List<int>
以包含猜测列表,并且仅当将密钥串传递给解密函数时,才必须使用字符串。另外,切勿在现代编程中使用ArrayList
,该类存在的唯一原因是与旧代码的向后兼容性。如果确实需要一个可以接受任何内容的列表,请使用List<object>
代替,但使用List<int>
或List<string>
这样的特定列表会更好。