首页 > 其他 > 详细

变进制数的应用-穷举密码组合

时间:2014-04-03 23:40:49      阅读:504      评论:0      收藏:0      [点我收藏+]
bubuko.com,布布扣
  如果从0-9之间这10个数字里面挑选4个数字组成一个字符串(相临字符允许重复),其实就是0000,0001,0002......9999这10000种组合也就是10^4种组合。我当时想的就是如果把这0-9換成是任意字符在数组中对应的下标,那我就可以根据每位数字来确定对应的字符串是哪一个字符,并且每一种组合对应的每一位下标都可以计算出。结合平常所接触到的八进制与二进制,就可以扩大范围到任意进制数,同样也就可以将字符集扩大到所有可用字符的范围(需要注意计算时的溢出问题)
  
bubuko.com,布布扣


  其中“/"为取整运行,”%“为取余运算,”P^j“为P的j次方且优先级别最高。根据以上的计算与推测(个人使用EXCEL推算验证,这里没有列出)写出使用小写字母、大写字母和数字生成长度为8的所有密码组合算法如下(C#实现,不可直接运行):
using
System; using System.Collections.Generic; using System.IO, using System.Linq; using System.Text; using System.Threading.Tasks; namespace GeneratePassword { class GeneratePassword { private static double num; private char[] passwordChar = {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, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9}; private int _pwdLen; public int pwdLen { get { return _pwdLen; } set { _pwdLen = value; } } public GeneratePassword(int passwordLength) { pwdLen = passwordLength; } public void Generate() { char[] arrDest = new char[pwdLen]; int temp; num = Math.Pow(passwordChar.Length, pwdLen); int passwordCharLen = passwordChar.Length; for (Int64 i = 0; i < num; i++) { for (int j = 0; j < pwdLen; j++ ) { //if (j == 0) //{ // temp = (int)(i % passwordCharLen); // arrDest[j] = passwordChar[temp]; //} //else //{ temp = (int)(Math.Floor(i / Math.Pow(passwordCharLen, j)) % passwordCharLen); arrDest[j] = passwordChar[temp]; //} } WriteFile.writeToFile(new string(arrDest)); } } } }
bubuko.com,布布扣

 

变进制数的应用-穷举密码组合,布布扣,bubuko.com

变进制数的应用-穷举密码组合

原文:http://www.cnblogs.com/TangLingLi/p/3643570.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!