using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Diagnostics;
using System.Security.Cryptography;
namespace fanhui_string
{
class Program
{
private const int NUM_AES_KEYS = 800000;
private const int NUM_MD5_HASHES = 100000;
private static string ConvertToHexString(Byte[] byteArray)//转换成16位
{
// Convert the byte array to hexadecimal string
var sb = new StringBuilder(byteArray.Length);
for (int i = 0; i < byteArray.Length; i++)
{
sb.Append(byteArray[i].ToString("X2"));
}
return sb.ToString();
}
private static List<String> GenerateAESKeysWithCharPrefix(//定义返回类型
System.Threading.CancellationToken ct, char prefix)
{
var sw = Stopwatch.StartNew();
var aesM = new AesManaged();
var keysList = new List<String>();
for (int i = 1; i <= NUM_AES_KEYS; i++)
{
aesM.GenerateKey();
byte[] result = aesM.Key;
string hexString = ConvertToHexString(result);
if (hexString[0] == prefix) //prefix 开头第一个字符
{
keysList.Add(hexString);
}
// Console.WriteLine("AES KEY: {0} ", hexString);
if (ct.IsCancellationRequested)
{
ct.ThrowIfCancellationRequested();
}
}
Debug.WriteLine("AES: " + sw.Elapsed.ToString());
return keysList; //返回值
}
static void Main(string[] args)
{
Console.ReadLine();
Console.WriteLine("Started");
var cts = new System.Threading.CancellationTokenSource();
var ct = cts.Token;
var sw = Stopwatch.StartNew();
// The compiler will infer t1 as Task<List<String>>
// from the delegate's body
var t1 = Task.Factory.StartNew(
() => GenerateAESKeysWithCharPrefix(ct, 'A'), ct);
try
{
// Wait for t1 to finish
t1.Wait();
}
catch (AggregateException ex)
{
foreach (Exception innerEx in ex.InnerExceptions)
{
Debug.WriteLine(innerEx.ToString());
// Do something based on the innerEx Exception
}
}
if (t1.IsCanceled)
{
Console.WriteLine(
"The task running GenerateAESKeysWithCharPrefix was cancelled.");
}
if (t1.IsFaulted)
{
foreach (Exception innerEx in t1.Exception.InnerExceptions)
{
Debug.WriteLine(innerEx.ToString());
// Do something based on the innerEx Exception
}
}
var t2 = Task.Factory.StartNew(() =>
{
for (int i = 0; i < t1.Result.Count; i++)
{
// Do something with the result
// returned by the task’s delegate
Console.WriteLine(t1.Result[i]);
}
}, TaskCreationOptions.LongRunning);
Debug.WriteLine(sw.Elapsed.ToString());
// Display the results and wait for the user to press a key
Console.WriteLine("Finished!");
Console.ReadLine();
}
}
}