这里所谓的“全密码”指的是指定字符串中所有可能出现的密码。以字符串“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. springboot 配置webservice接口

    导入依赖的jar <!-- webservice cxf --> <dependency> <groupId>org.apache.cxf</groupId& ...

  2. JMeter组件之BeanShell PostProcessor的使用

    1. 场景一:获取请求响应中的数据,并保存 import com.alibaba.fastjson.*;  // 引入包.这个包需要先放在:<安装目录>\apache-jmeter-3.2 ...

  3. 通过UIColor转换为UIImage

    + (UIImage *)createImageWithColor:(UIColor *)color { CGRect rect=CGRectMake(0.0f, 0.0f, 1.0f, 1.0f); ...

  4. Windows10 安装 .Net 3.5 失败的解决方案

    最近因为使用一个公司内部的工具,需要安装.Net 3.5 SP1, 却发现无论如何都安装不上,无论是通过在线和离线安装包,还是通过Windows自带的feature安装功能,每次都是会提示错误0x80 ...

  5. Mac下使用Wine安装Xshell 4和Xftp 4

    下载: (链接: https://pan.baidu.com/s/1o78qisM 密码: 79sq) 安装: 1.安装Wine 参考:http://www.cnblogs.com/EasonJim/ ...

  6. FindLine把多行查找改为多行替换

    Sub FindLine() Dim textSelection As TextSelection textSelection = DTE.ActiveDocument.Selection textS ...

  7. 【ORACLE】ORACLE session(会话)管理

    #查看当前不为空的连接select * from v$session where username is not null #查看不同用户的连接数 select username,count(user ...

  8. python实现RSA加密解密方法

    python3.5 安装pip 安装rsa python -m pip install rsa 我们可以生成RSA公钥和密钥,也可以load一个.pem文件进来 # -*- coding: utf-8 ...

  9. 数据库其他注入思路 - 万能密码 - cookie注入 -搜索型注入

    另类登录注入形式: 经常有一类验证(ASP,PHP,JSP均存在),先判断user是否存在,ASP为例子:"select password from admin where user_nam ...

  10. Java 正则表达式 中的 任意字符

    原来正则表达式中的"."代表的是除换行以外的任意字符,如果要真正代表任意字符,需要把换行符也加进去,但是经过测试"[.\\n]"不生效,可以使用"\\ ...