这里所谓的“全密码”指的是指定字符串中所有可能出现的密码。以字符串“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. Android服务重启

    现在有这样的需求,防止自己的app被其他的应用程序(比如qq手机管家)杀死,该怎么实现呢.我们知道app都是运行在进程中的,android是怎样管理这些进程的呢.要想app不被杀死,只要做到进程不被结 ...

  2. Hyperledger Fabric

    https://wiki.hyperledger.org/display/fabric Hyperledger Fabric     转至元数据结尾   由 Tracy Kuhrt创建, 最终由 Da ...

  3. 1.CentOS6.5下的基础DNS配置

    常规DNS的安全和配置1.安装DNSyum -y install bind bind-utils安装后生成的文件,我们主要配置下面几个/etc/named.conf/var/named/xx这个xx是 ...

  4. servlet的url-pattern规则

    https://www.cnblogs.com/canger/p/6084846.html

  5. mono修改代码模板

    新建android application是在这里修改模板D:\prostu\Microsoft Visual Studio 10.0\Common7\IDE\ProjectTemplatesCach ...

  6. lrzsz

    新搞的云服务器用SecureCRT不支持上传和下载,没有找到rz命令.记录一下如何安装rz/sz命令的方法. 一.工具说明 在SecureCRT这样的ssh登录软件里, 通过在Linux界面里输入rz ...

  7. 032-IDUtils 工具类模板

    模板一: package cn.e3mall.common.utils; import java.util.Random; /** * 各种id生成策略 * @title:IDUtils * @des ...

  8. web开发之缓存

    以数据为驱动的web站点,当访问量增大后,由于频繁的从DB中读取数据,使得DB服务器的压力大增,从而影响系统的性能.为了缓解这种来自于大访问量的频繁读取DB的压力,我们可以把一些数据缓存起来,当请求过 ...

  9. 在超链接href中实现form的提交

    <form name="form1" method="post" action=""> <div class=" ...

  10. MYSQL5.7 sql_mode=only_full_group_by

    错误提示: .... which is not functionally dependent on columns in GROUP BY clause; this is incompatible w ...