在最近的开发中,遇到了一个问题,发现Python没有一个生成指定复杂度密码的模块(反正我没有找到),需要自己写一段生成随机数的代码来生成密码,因此我就用C++自己写的一个扩展模块。
模块的要求:
上面的要求可以自己定制,比如说加上特殊字符,都是可以的,只要稍稍修改下代码即可。
头文件
//
// Created by lanyulei on 18-9-27.
//
#ifndef GENERATEPASSWORD_GENERATEPASSWORD_H
#define GENERATEPASSWORD_GENERATEPASSWORD_H
#include <iostream>
#include <string>
#include <time.h>
#include <boost/python.hpp>
using namespace boost::python;
class GeneratePassword{
public:
GeneratePassword(int length);
std::string getPassword();
private:
int m_intLength;
};
#endif //GENERATEPASSWORD_GENERATEPASSWORD_H
源文件
//
// Created by lanyulei on 18-9-27.
//
#include "GeneratePassword.h"
using namespace std;
// 判断密码复杂度是否符合要求
bool judgment(const string& passowrdValue, int length) {
int Pcount = 0;
int pcount = 0;
int numberCount = 0;
for (int i=0; i<length; i++) {
if (isupper(passowrdValue[i])) {
Pcount++;
} else if (islower(passowrdValue[i])) {
pcount++;
} else if (isdigit(passowrdValue[i])) {
numberCount++;
}
}
if (Pcount && pcount && numberCount) {
return true;
} else {
return false;
}
}
// 构造函数,设置密码生成位数
GeneratePassword::GeneratePassword(int length):m_intLength(length){}
// 生成密码,并且返回
string GeneratePassword::getPassword() {
char chr[] = {'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'
};
string strResult;
int gcounts = 0;
while (gcounts < 10) {
if (judgment(strResult, m_intLength)) {
break;
} else {
strResult.clear();
char buf[10] = {0};
for (int i=0; i<m_intLength; i++) {
int idx = rand()%62;
sprintf(buf, "%c", chr[idx]);
strResult.append(buf);
}
}
gcounts++;
}
return strResult;
}
// 生成Python可调用的动态链接库
BOOST_PYTHON_MODULE(gpassword){
class_<GeneratePassword>
("gpassword", init<int>())
.def("getPassword", &GeneratePassword::getPassword);
}
编译命令
# python3
g++ -shared -o helloworld.so -fPIC -I/usr/include/python3.6m/ helloworld.cpp -lpython3.6m -lboost_python3
# python2
g++ -shared -o helloworld.so -fPIC -I/usr/include/python2.7/ helloworld.cpp -lpython -lboost_python
效果展示
In [2]: import gpassword
In [3]: gp = gpassword.gpassword(18) // 实例化,并且设置生成多少位的密码
In [4]: gp.getPassword() // 生成密码
Out[4]: 'fa37JncCHryDsbzayy'
写的有点low,如有好的意见请不吝赐教,非常感谢。
另外有需要云服务器可以了解下创新互联scvps.cn,海内外云服务器15元起步,三天无理由+7*72小时售后在线,公司持有idc许可证,提供“云服务器、裸金属服务器、高防服务器、香港服务器、美国服务器、虚拟主机、免备案服务器”等云主机租用服务以及企业上云的综合解决方案,具有“安全稳定、简单易用、服务可用性高、性价比高”等特点与优势,专为企业上云打造定制,能够满足用户丰富、多元化的应用场景需求。
网站标题:C++编写Python扩展(密码生成器)-创新互联
网站路径:https://www.cdcxhl.com/article14/iecge.html
成都网站建设公司_创新互联,为您提供响应式网站、关键词优化、商城网站、虚拟主机、企业网站制作、营销型网站建设
声明:本网站发布的内容(图片、视频和文字)以用户投稿、用户转载内容为主,如果涉及侵权请尽快告知,我们将会在第一时间删除。文章观点不代表本网站立场,如需处理请联系客服。电话:028-86922220;邮箱:631063699@qq.com。内容未经允许不得转载,或转载时需注明来源: 创新互联