在最近的開發(fā)中,遇到了一個問題,發(fā)現(xiàn)Python沒有一個生成指定復雜度密碼的模塊(反正我沒有找到),需要自己寫一段生成隨機數(shù)的代碼來生成密碼,因此我就用C++自己寫的一個擴展模塊。
創(chuàng)新互聯(lián)公司致力于互聯(lián)網(wǎng)品牌建設與網(wǎng)絡營銷,包括成都做網(wǎng)站、網(wǎng)站制作、成都外貿網(wǎng)站建設、SEO優(yōu)化、網(wǎng)絡推廣、整站優(yōu)化營銷策劃推廣、電子商務、移動互聯(lián)網(wǎng)營銷等。創(chuàng)新互聯(lián)公司為不同類型的客戶提供良好的互聯(lián)網(wǎng)應用定制及解決方案,創(chuàng)新互聯(lián)公司核心團隊十多年專注互聯(lián)網(wǎng)開發(fā),積累了豐富的網(wǎng)站經驗,為廣大企業(yè)客戶提供一站式企業(yè)網(wǎng)站建設服務,在網(wǎng)站建設行業(yè)內樹立了良好口碑。模塊的要求:
上面的要求可以自己定制,比如說加上特殊字符,都是可以的,只要稍稍修改下代碼即可。
頭文件
//
// 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;
}
}
// 構造函數(shù),設置密碼生成位數(shù)
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可調用的動態(tài)鏈接庫
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,如有好的意見請不吝賜教,非常感謝。
另外有需要云服務器可以了解下創(chuàng)新互聯(lián)scvps.cn,海內外云服務器15元起步,三天無理由+7*72小時售后在線,公司持有idc許可證,提供“云服務器、裸金屬服務器、高防服務器、香港服務器、美國服務器、虛擬主機、免備案服務器”等云主機租用服務以及企業(yè)上云的綜合解決方案,具有“安全穩(wěn)定、簡單易用、服務可用性高、性價比高”等特點與優(yōu)勢,專為企業(yè)上云打造定制,能夠滿足用戶豐富、多元化的應用場景需求。
網(wǎng)站標題:C++編寫Python擴展(密碼生成器)-創(chuàng)新互聯(lián)
網(wǎng)站路徑:http://aaarwkj.com/article14/iecge.html
成都網(wǎng)站建設公司_創(chuàng)新互聯(lián),為您提供響應式網(wǎng)站、關鍵詞優(yōu)化、商城網(wǎng)站、虛擬主機、企業(yè)網(wǎng)站制作、營銷型網(wǎng)站建設
聲明:本網(wǎng)站發(fā)布的內容(圖片、視頻和文字)以用戶投稿、用戶轉載內容為主,如果涉及侵權請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內容未經允許不得轉載,或轉載時需注明來源: 創(chuàng)新互聯(lián)