这里所谓的“全密码”指的是指定字符串中所有可能出现的密码。以字符串“0123456789”为例,可能出现的2位密码会有100个,即L^N个。(L代表字符串的长度,N代表要生成密码的位数)。

第一种方法:递归。这个比较容易理解,每分解出一个字符,设成新串,然后靠到上一个串上即可。代码如下:

void CpasswordCreateDlg::CreatePass1(CString inStr,int m,CString outStr)
{
if (m==)
{
fp.SeekToEnd();
CString tStr=outStr+L"\n";
fp.WriteString(tStr);//fp为一个CStdioFile,全局变量
passFlag++;//生成了多少个密码,以用于进度条,为ULONGLONG类型
int persent=int((float)passFlag/passScore*);//passScore要生成密码的总数量
if (persent%==)
{
m_progressCtrl.SetPos(persent);//m_progressCtrl是进度条
} }
else
{
for (int i=;i<inStr.GetLength();i++)
{
CreatePass1(inStr,m-,outStr+inStr.Mid(i,));
}
}
}

第二种方法:循环的方式,不使用递归。代码如下,现在如果让我解释代码的意思,还真想不出来当时为什么这么设计,竟然无法理解自己当时为什么这么牛B,能想出下面的代码。

void CpasswordCreateDlg::CreatePass2(CString inStr,int m)
{
fp.SeekToEnd();
int *flag=new int [m];//用一个整形指针取出字符串中某个位置的字符
for (int i=;i<m;i++)
{
flag[i]=;
}
int inStrLen=inStr.GetLength();
ULONGLONG passCount=(ULONGLONG)pow((double)inStrLen,m);
for (ULONGLONG i=;i<passCount;i++)
{
for (int t=;t<m;t++)
{
if (flag[m-t]>&&flag[m-t]%inStrLen==)//这个地方比较拗口,我也忘记当时是怎么出来的这种想法的。
{
flag[m-t-]++;
flag[m-t]=;
}
}
CString str=L"";
for (int j=;j<m;j++)
{
str+=inStr.GetAt(flag[j]);
}
flag[m-]++;
str+=L"\n";
fp.WriteString(str);
passFlag++;
int persent=int((float)passFlag/passScore*);
if (persent%==)
{
m_progressCtrl.SetPos(persent);
}
}
delete [] flag;
}

生成的速度不是很快,一秒钟大约2万多个吧,实际上是基本没什么用的。例如:以这个速度要生成5位的全密码,密码个数为916132832,大约需要12个小时,如果6位呢,7位呢,所以是基本没什么用的,效率太低了。希望下一步能用多个线程实现,速度再快一些。

c++实现全密码生成的更多相关文章

  1. Linux下三个密码生成工具

    http://code.csdn.net/news/2820879 想出一个难破解且容易记的密码对不是一件简单的事情.在我为电脑设定一个新密码,或者在线注册了一个新的账号,需要输入密码的时候,脑袋就一 ...

  2. wordpress密码生成与登录密码验证

    一.研究wordpress时wordpess的密码密码生成与登录密码验证方式很重要 WordPress密码已成为整合的首要目标,如何征服整合,就得了解WordPress密码算法. WordPress系 ...

  3. 复杂密码生成工具apg

    复杂密码生成工具apg   密码是身份认证的重要方式.由于密码爆破方式的存在,弱密码非常不安全.为了构建复杂密码,Kali Linux预置了一个复杂密码生成工具apg.该工具可以提供可读密码和随机字符 ...

  4. kali 系列学习07-攻击之密码生成

    比较理想的字典是拖库字典,比如CSDN字典,如果要生成字典,可以使用Crunch 和 rtgen 两个工具, 一.密码生成 1.Crunch (1)启动crunch命令.执行命令如下所示. #crun ...

  5. 用python进行wifi密码生成

    随着无线网络的不断发展,几乎所有场合都会覆盖WIFI信号,无论是公共地点还是家庭之中.众所周知,目前WIFI普遍的认证方式为wpa2,这种认证方式安全性相当不错,但由于人们设置密码时的随意性和固有思维 ...

  6. 烂泥:apache密码生成工具htpasswd的应用

    本文由秀依林枫提供友情赞助,首发于烂泥行天下. 1. htpasswd的作用与安装 2. htpasswd命令详解 3. htpasswd的实例 4. htpasswd的应用 一.htpasswd的作 ...

  7. 射频识别技术漫谈(19)——Desfire的3次握手认证和段密码生成

    3次握手认证并生成临时的通讯密钥在通讯技术中的应用非常普遍,Mifare Desfire也使用了这种成熟的认证加密方法.Desfire在卡片数据传输前使用DES或3DES进行3次握手认证,认证成功一方 ...

  8. 两款不错的Linux密码生成工具

    先介绍最简单的方法,Linux自带的 $ strings /dev/urandom | | ; echo whucNWhr35W6ZP0MxrLQ $ /dev/random | base64 | t ...

  9. kickstart之中rootpw密码生成方法

    一.简介 linux kickstart文件里rootpw密码可以使用明文,也可以使用加密过的值,这里主要介绍下三种加密方法:md5.sha256.sha512 使用明文的方法 rootpw &quo ...

随机推荐

  1. 「工具」三分钟了解一款在线流程绘制工具:Whimsical

    Whimsical 是一款在线流程绘制工具,只需要一个浏览器就随时随地绘制精美的流程图.除了流程图(Flowcharts)功能,官方还推出了线框图(Wireframes).便利贴(Sticky Not ...

  2. java项目迁移

    电脑重装系统以后或者从不同MyEclipse版本迁移项目时候会出现: Project facet Java 1.5 is not supported by target runtime Apache ...

  3. Lambda入门

    Lambda 来源于微积分数学中的 λ,其涵义是声明为了表达一个函数具体需要什么. Table of contents Introduction 使用 Introduction 什么是Lambda? ...

  4. P1642 规划

    题目链接 题意分析 一看就知道是一道\(01\)分数规划的题 我们二分值之后 跑树形背包就可以了 CODE: #include<iostream> #include<cstdio&g ...

  5. Android NDK开发及OpenCV初步学习笔记

    https://www.jianshu.com/p/c29bb20908da Android NDK开发及OpenCV初步学习笔记 Super_圣代 关注 2017.08.19 00:55* 字数 6 ...

  6. NPOI设置水平、垂直居中

    C#语法: string fs = "@report.xls";//文件路径 FileStream excelPath = File.Open(@fs, FileMode.Open ...

  7. 怎么搭建一个5T的私有云盘

    视频 点击打开视频 下载地址 免费域名网址: https://www.freewebhostingarea.com/ ftp工具: http://t.cn/EXWxYUI oneindex: http ...

  8. 认识CSS中高级技巧之用户界面样式

    前端之HTML,CSS(九) CSS高级技巧 CSS用户界面样式 用户界面样式指更改用户操作样式,如更改用户的鼠标样式.表单轮廓等. 鼠标样式cursor cursor属性具有属性值有:default ...

  9. css3基础下

    box-shadow:0 5px 5px rgba(0,0,0,0.5) 文本 text-shadow:5px 5px 4px green; word-wrap: 背景: background:#ff ...

  10. python2和python3中列表推导式的变量泄露问题

    Python 2.x 中,在列表推导中 for 关键词之后的赋值操作可能会影响列表推导上下文中的同名变量.像下面这个 Python 2.7 控制台对话: Python 2.7.15 (default, ...