博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
Python 生成账号密码算法
阅读量:4350 次
发布时间:2019-06-07

本文共 9402 字,大约阅读时间需要 31 分钟。

有个需求,需要伪造跟用户行为非常类似的账号密码,而且需要一个阀值控制伪造的数量。

在这需求上,还有一个就是需要控制生成的比率、跳出率不能过高或者太低。

对此就随手用python写了一个,bug不知道有木有,没有测,具体有兴趣可以去改改。

#coding:utf-8import randomclass create_data:    global zimu_xx,zimu_dx,number,teshu    # 生成26个英文字母,大小写    zimu_xx=[chr(i) for i in range(97,123)]    zimu_dx=[chr(i).upper() for i in range(97,123)]    # 生成随机的数字范围在(1-8000)    number=[i for i in range(1,8001)]    # 生成特殊字符串    teshu=['!','@','#','$','%','^','&','*','(',')','_','+','-','=','|','}','{
','[',']',';','"',',','<','>','.','?','/'] def __init__(self): self.u_1=0 self.u_2=0 self.u_3=0 self.u_4=0 self.p_1=0 self.p_2=0 self.p_3=0 self.p_4=0 self.p_5=0 self.p_6=0 def username(self): # 随机判断标准 task=random.randint(0,10) # 结果列表 results_all=[] # 字母结果 results_letters=[] # 数字结果 results_digital=[] try: if (task>0 and task<3): self.u_1=self.u_1+1 while len(results_letters)<4: results_letters.append(random.choice(zimu_xx)) results_all.append("".join(results_letters)) while True: if random.choice(number)<1500: results_all.append(random.choice(number)) break else: continue return results_all[0].encode('utf-8')+str(results_all[1]) elif (task>3 and task<6): self.u_2=self.u_2+1 while len(results_letters)<5: results_letters.append(random.choice(zimu_xx)) results_all.append("".join(results_letters)) while True: if random.choice(number)>1500 and random.choice(number)<3000: results_all.append(random.choice(number)) break else: continue return results_all[0].encode('utf-8')+str(results_all[1]) elif (task>6 and task<9): self.u_3=self.u_3+1 while len(results_letters)<6: results_letters.append(random.choice(zimu_xx)) results_all.append("".join(results_letters)) while True: if random.choice(number)>3000 and random.choice(number)<6000: results_all.append(random.choice(number)) break else: continue return results_all[0].encode('utf-8')+str(results_all[1]) else: self.u_4=self.u_4+1 temp=[] while len(results_letters)<3: results_letters.append(random.choice(zimu_xx)) results_all.append("".join(results_letters)) while True: if random.choice(number)>6000 and random.choice(number)<8000: results_all.append(random.choice(number)) break else: continue while len(temp)<3: temp.append(random.choice(results_letters)) results_all.append("".join(temp)) return results_all[0]+str(results_all[1])+results_all[2] except IndexError,e: pass def passwd(self): # 随机判断标准 task=random.randint(0,15) # 结果列表 results_all=[] # 字母结果(大写) results_letters_big=[] # 字母结果(小写) results_letters_small=[] # 数字结果 results_digital=[] # 特殊字符 results_special_characters=[] try: if (task>0 and task<3): self.p_1=self.p_1+1 while len(results_letters_big)<3: results_letters_big.append(random.choice(zimu_dx)) while len(results_letters_small)<3: results_letters_small.append(random.choice(zimu_xx)) results_all.append("".join(results_letters_big)) results_all.append("".join(results_letters_small)) while len(results_special_characters)<3: results_special_characters.append(random.choice(teshu)) results_all.append("".join(results_special_characters)) while True: test_num=[i for i in range(200,800)] if random.choice(test_num)>300 and random.choice(test_num)<600: results_all.append(random.choice(test_num)) break else: continue return results_all[0]+results_all[1]+results_all[2]+str(results_all[3]) elif (task>3 and task<4): self.p_2=self.p_2+1 while len(results_letters_big)<4: results_letters_big.append(random.choice(zimu_dx)) while len(results_letters_small)<3: results_letters_small.append(random.choice(zimu_xx)) results_all.append("".join(results_letters_big)) results_all.append("".join(results_letters_small)) while len(results_special_characters)<4: results_special_characters.append(random.choice(teshu)) results_all.append("".join(results_special_characters)) while True: test_num=[i for i in range(500,1400)] if random.choice(test_num)>600 and random.choice(test_num)<1200: results_all.append(random.choice(test_num)) break else: continue return results_all[0]+results_all[2]+results_all[1]+str(results_all[3]) elif (task>4 and task<9): self.p_3=self.p_3+1 while len(results_letters_big)<3: results_letters_big.append(random.choice(zimu_dx)) while len(results_letters_small)<4: results_letters_small.append(random.choice(zimu_xx)) results_all.append("".join(results_letters_big)) results_all.append("".join(results_letters_small)) while True: test_num=[i for i in range(1100,2600)] if random.choice(test_num)>1200 and random.choice(test_num)<2400: results_all.append(random.choice(test_num)) break else: continue return results_all[1]+results_all[0]+str(results_all[2]) elif (task>9 and task<12): self.p_4=self.p_4+1 while len(results_letters_big)<3: results_letters_big.append(random.choice(zimu_dx)) while len(results_letters_small)<4: results_letters_small.append(random.choice(zimu_xx)) results_all.append("".join(results_letters_big)) results_all.append("".join(results_letters_small)) while True: test_num=[i for i in range(2300,5000)] if random.choice(test_num)>2400 and random.choice(test_num)<5000: results_all.append(random.choice(test_num)) break else: continue return str(results_all[2])+results_all[1]+results_all[0] elif (task>12 and task<15): self.p_5=self.p_5+1 while len(results_letters_big)<4: results_letters_big.append(random.choice(zimu_dx)) while len(results_letters_small)<5: results_letters_small.append(random.choice(zimu_xx)) results_all.append("".join(results_letters_big)) results_all.append("".join(results_letters_small)) while True: test_num=[i for i in range(4900,10000)] if random.choice(test_num)>5000 and random.choice(test_num)<10000: results_all.append(random.choice(test_num)) break else: continue return str(results_all[2])+results_all[0]+results_all[1] else: self.p_6=self.p_6+1 while len(results_letters_big)<5: results_letters_big.append(random.choice(zimu_dx)) while len(results_letters_small)<4: results_letters_small.append(random.choice(zimu_xx)) results_all.append("".join(results_letters_big)) results_all.append("".join(results_letters_small)) return results_all[0]+results_all[1] except IndexError,e: pass def count_data(self): print "生成100组账号密码的概率比例:" print "========账号类比率=======" print "方案1: %s%% 方案2: %s%% 方案3: %s%% 方案4: %s%%" % (self.u_1,self.u_2,self.u_3,self.u_4) print "========密码类比率=======" print "方案1: %s%% 方案2: %s%% 方案3: %s%% 方案4: %s%% 方案5: %s%% 方案6: %s%%" % (self.p_1,self.p_2,self.p_3,self.p_4,self.p_5,self.p_6)if __name__=='__main__': t=create_data() for i in range(0,100): print "生成账号: %s 密码: %s" % (t.username(),t.passwd()) t.count_data()

 

转载于:https://www.cnblogs.com/xiaoCon/p/3891996.html

你可能感兴趣的文章
SparkContext的初始化(季篇)——测量系统、ContextCleaner及环境更新
查看>>
IOS - 消息推送原理和实现
查看>>
jQuery
查看>>
虚拟机安装CentOS 7 ping不通百度/并且使用Xshell 连接
查看>>
excel文件导入mysql
查看>>
jquery $.post() 向php传值 实现简单的二级联动
查看>>
Java集合详解
查看>>
【httpclient-4.3.1.jar】httpclient发送get、post请求以及携带数据上传文件
查看>>
argc和argv[]
查看>>
Tomcat面试题目
查看>>
启动elasticsearch出现java.lang.NoClassDefFoundError: org/elasticsearch/plugins/NetworkPlugin
查看>>
PHP的垃圾回收机制详解
查看>>
154. Find Minimum in Rotated Sorted Array II
查看>>
腾讯QQ会员技术团队:以手机QQ会员H5加速为例,为你揭开sonic技术内幕
查看>>
七个对我最重要的职业建议(译文)
查看>>
数据库连接池
查看>>
Angular(一)
查看>>
python 基本内容
查看>>
三次握手以及四次挥手
查看>>
leetcode-1 Two Sum 找到数组中两数字和为指定和
查看>>