博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
10进制转62进制,实现穷举指定位数的所有密码组合(暴力破解)
阅读量:6325 次
发布时间:2019-06-22

本文共 2466 字,大约阅读时间需要 8 分钟。

因为我们这里要穷举的密码包括0-9,a-z,A-Z共62个字符,所以我们采用62进制来遍历。

首先,我们实现一个10进制转62进制的方法。

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" };        ///         /// 将指定数字转换为指定长度的62进制        ///         /// 要转换的数字        /// 需要的长度        /// 
62进制表示格式
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; }

进过测试发现把charSet定义成char类型比string的要快一点,但马中的计算也采用char的方式(我注释掉的代码)也要快一点。 

Console.WriteLine(ConvertTo62(520, 5));//输出:0008o

因为520转换成为62进制是8o,不足5位前面加0补齐。 

然后,我们就可以写一个方法来遍历指定长度的密码了。

///         /// 遍历指定位数之间的所有组合        ///         /// 最短位数        /// 最长位数        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(2, 3); 

程序将会输出2位和3位密码的所有组合形式。(从:00-ZZZ) 

根据这个思路,我们还可以写出更多形式的穷举算法。比如我们遍历的密码还包含小数点“.”,那么我们只需要把算法改成63进制即可。

转载地址:http://ibmaa.baihongyu.com/

你可能感兴趣的文章
JForum 源码分析
查看>>
【nginx】nginx:利用负载均衡原理实现代码的热部署和灰度发布
查看>>
电子书 VS 纸质书
查看>>
老板雇佣的是40小时的工作量还是普通人需要花40小时才能完成的工作成果?
查看>>
javascript实时保存时出现改动多条记录的bug
查看>>
leetCode 57.Insert Interval (插入区间) 解题思路和方法
查看>>
VREP中的力触觉设备接口(CHAI3D)
查看>>
jQuery中append、insertBefore、after与insertAfter方法注意事项
查看>>
Android零基础入门第1节:Android的前世今生
查看>>
【Linux】 Linux权限管理与特殊权限
查看>>
Android的事件分发
查看>>
【Lua】环境安装与HelloWorld
查看>>
maven多module项目中千万不要引入其它模块的单元測试代码
查看>>
Java集合框架:EnumMap
查看>>
Oracle之外键(Foreign Key)使用方法具体解释(二)- 级联删除(DELETE CASCADE)
查看>>
python学习:收集ip信息
查看>>
MySQL之IDE工具介绍及数据备份
查看>>
poj1190生日蛋糕
查看>>
【批处理学习笔记】第十七课:截取字符串
查看>>
联想Thinkpad笔记本自带win10改win7图文教程
查看>>