我想循环所有密码
循环a-z A-Z 0-9
自己的办法训话太可怕了。
递归可能会很简单吧,太乱了。希望帮忙下。希望写个方法2个参数,第一个是从几位,第二个是到几位返回字符窜,想学习下你们是什么算法
循环a-z A-Z 0-9
自己的办法训话太可怕了。
递归可能会很简单吧,太乱了。希望帮忙下。希望写个方法2个参数,第一个是从几位,第二个是到几位返回字符窜,想学习下你们是什么算法
解决方案 »
- 用ClickOnce部署第3方dll
- 将字节数组格式保存的位图转换成域位数组
- entity framework spring.net 微软企业库这三者区别是什么,在实际应用中怎么选择
- 怎么判断鼠标是一直按下的,然后执行一段东西,放开后,执行也停止?
- 继承问题
- EXCEL上传时,提示文件正在使用!
- 如何定义自己类型的文件
- 在service 中读取xml文档的函数是什么?
- 谁有?进了看看
- 解决后会有100分的额外奖励!!formsauthentication.setauthcookie(username,false)的cookie.value问题
- An error has occurred. See error log for more details. 84
- c# 如何做到拖曳图片框到其它的软件上,并获得相对应的句柄。
http://topic.csdn.net/u/20090217/21/f41ed9f6-f929-451c-a5c9-80d2e408422a.html
private static char[] charSet = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
//private static string[] charSet = { "0", "1", "2", "3", "4", "5", "6", "7", "8", "9",
// "a", "b", "c", "d", "e", "f", "g", "h", "i", "j", "k", "l", "m",
// "n", "o", "p", "q", "r", "s", "t", "u", "v", "w", "x", "y", "z",
// "A", "B", "C", "D", "E", "F", "G", "H", "I", "J", "K", "L", "M",
// "N", "O", "P", "Q", "R", "S", "T", "U", "V", "W", "X", "Y", "Z" }; /// <summary>
/// 将指定数字转换为指定长度的62进制
/// </summary>
/// <param name="value">要转换的数字</param>
/// <param name="length">需要的长度</param>
/// <returns>62进制表示格式</returns>
public static string ConvertTo62(long value, int length)
{
string sixtyNum = string.Empty;
if (value < 62)
{
sixtyNum = charSet[value].ToString().PadLeft(length, '0');
}
else
{
long result = value;
//char[] ch = new char[length];
while (result > 0)
{
long val = result % 62;
//ch[--length] = charSet[val];
sixtyNum = charSet[val] + sixtyNum;
result = result / 62;
}
sixtyNum = sixtyNum.PadLeft(length, '0');
//for (int i = 0; i < length; i++)
//{
// ch[i] = '0';
//}
//sixtyNum = new string(ch);
}
return sixtyNum;
}
public static void Main()
{
Stopwatch sw = new Stopwatch();
sw.Start();
int pwdLength = 5;//要遍历多少位的密码
//5位62进制的最小值是62的4次方(10000),最大值就是62的5次方-1(ZZZZZ)
//从00000到ZZZZZ
long maxNum = (long)Math.Pow(62, pwdLength);
for (long i = 0; i < maxNum; i++)
{
Console.WriteLine(ConvertTo62(i, pwdLength));
}
sw.Stop();
Console.WriteLine("总运行时间:" + sw.Elapsed);
}
采用62进制的方式实现,定义和运算的时候使用char要快点。
/// <summary>
/// 遍历指定位数之间的所有组合
/// </summary>
/// <param name="minLength">最短位数</param>
/// <param name="maxLength">最长位数</param>
public static void testPassword(int minLength, int maxLength)
{
for (int i = minLength; i <= maxLength; i++)
{
long maxNum = (long)Math.Pow(62, i);
for (long j = 0; j < maxNum; j++)
{
Console.WriteLine(ConvertTo62(j, i));
}
}
}
testPassword(5, 8);//将输出5--8位所有组合
是的,比如10进制我们要循环3位数的所有组合,只需要挨着跑一次就OK了。
000--999(000,001,002,003100,101,102。998,999)
从0到10的2次方-1因为0-9,a-z,A-Z共62个字符,我们用62进制来跑一次,就可以涵盖所有组合了。
开玩笑,怎么可能只有这些字母?!还有各种符号(例如_、-、+)以及其它字符(例如TAB对应的),以及罗马字、中国字、日文等等,这些都可以作为密码使用的字符。
哥们,能看看我代码么?挂机一会就出现发生错误,关闭什么的。
发送错误信息,百度下说什么内存溢出还是什么,应该是这个密码循环多了的问题?
我模拟post提交用了很久了没出现什么问题啊