随机密码生产器

python源码 import random import re import tkinter as tk a = 'abcdefghijkmnopqrstuvwxyzABCDEFGHJKLMNPQRSTUVWXYZ!@#%&*()<>{}+?123456789' def generate(n): #n表示密码位 s = 0 ddtt = \"\" # 初始化 ddtt 变量 while s == 0: ddtt = [] # 创建一个空列表 for i in range(n): # 循环n次 rand = random.randint(0, len(a)-1) # 生成随机数 ddtt.append(a[rand]) # 将随机数添加到列表中 ddtt = \"\".join(ddtt) # 将列表转换为字符串 if re.search(r'[a-z]', ddtt): # 判断字符串中是否包含小写字母 if re.search(r'[A-Z]', ddtt): # 判断字符串中是否包含大写字母 if re.search(r'[0-9]', ddtt): # 判断字符串中是否包含数字 if re.search(r'[!@#%&*()<>{}+?]', ddtt): # 判断字符串中是否包含特殊字符 s = 1 # 满足条件,跳出循环 return ddtt # 返回生成字符串 def create_window(): \"\"\"创建一个带有两个文本框的简单GUI窗口\"\"\" # 创建主窗口 window = tk.Tk() window.title(\"随机密码生成\") # 设置窗口大小 window.geometry(\"220x250\") # 宽x高 (像素) # 添加输入文本标签 input_label = tk.Label(window, text=\"生成几位数:\") input_label.pack(pady=5) # 增加上下内边距 # 创建输入文本框 input_entry = tk.Entry(window) input_entry.insert(0, \"8\") input_entry.pack(pady=5) # 增加上下内边距 # 添加显示长度标签 length_label = tk.Label(window, text=\"随机密码生成:\") length_label.pack(pady=5) # 增加上下内边距 # 创建一个框架来放置显示长度文本框和复制按钮 frame = tk.Frame(window) frame.pack(pady=5) # 创建显示长度文本框,初始值为空 length_entry = tk.Entry(frame) length_entry.pack(pady=5) # 增加上下内边距 def copy_text(): text_to_copy = length_entry.get() # 获取要复制的文本内容 window.clipboard_clear() # 清空剪贴板内容 window.clipboard_append(text_to_copy) # 将文本内容添加到剪贴板 # 创建一个按钮 button_1 = tk.Button(frame, text=\"复制\", command=copy_text) button_1.pack(pady=5) # 增加上下内边距 # 定义按钮点击事件的处理函数 def update_length(): input_text = input_entry.get() # 获取输入文本 num = generate(int(input_text)) # 调用generate函数 length_entry.delete(0, tk.END) # 清空长度文本框 length_entry.insert(0, str(num)) # 将生成的密码插入到长度文本框中 # 创建一个按钮 button = tk.Button(window, text=\"更新密码\", command=update_length) button.pack(pady=10) # 增加上下内边距 window.bind(lambda event: button.invoke()) # 绑定回车键触发按钮 # 运行主事件循环 window.mainloop() if __name__ == \"__main__\": create_window()

2025-09-17 · 1 min · wuhongbo

python编写kugou下载工具

python import hashlib import time import requests import re import json import prettytable as pt def md5_hash(date, keyword): text = [ 'NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt', 'appid=1014', 'bitrate=0', 'callback=callback123', f'clienttime={date}', 'clientver=1000', 'dfid=11S5Hd0E3dhq3jHxZ90dzFYU', 'filter=10', 'inputtype=0', 'iscorrection=1', 'isfuzzy=0', f'keyword={keyword}', 'mid=8b5710fdab09aea0e4649de3e430ad23', 'page=1', 'pagesize=30', 'platform=WebFilter', 'privilege_filter=0', 'srcappid=2919', 'token=', 'userid=0', 'uuid=8b5710fdab09aea0e4649de3e430ad23', 'NVPh5oo715z5DIWAeQlhMDsWXXQV4hwt' ] string = ''.join(text) # 创建 MD5 哈希对象 md5 = hashlib.md5() # 更新哈希对象的内容 md5.update(string.encode('utf-8')) # 更新哈希对象的内容 signature = md5.hexdigest() print(signature) return signature def save(music_id): link = 'https://wwwapi.kugou.com/yy/index.php' params = { 'r': 'play/getdata', # 'callback': 'jQuery19105617303032764249_1693890961892', 'dfid': '11S5Hd0E3dhq3jHxZ90dzFYU', 'appid': '1014', 'mid': '8b5710fdab09aea0e4649de3e430ad23', 'platid': '4', 'encode_album_audio_id': music_id, '_': '1693890961893', } link_data = requests.get(url=link, params=params, headers=headers).json() play_url = link_data['data']['play_url'] audio_name = link_data['data']['audio_name'] name = re.sub(r'[\\/:\"?*<>|]', '', audio_name) content = requests.get(url=play_url, headers=headers).content with open(\"./\" + name + '.mp3', mode='wb') as f: f.write(content) now_time = int(time.time() * 1000) keyword = input('请输入歌手名字 / 歌曲: ') signature = md5_hash(now_time, keyword) url = 'https://complexsearch.kugou.com/v2/search/song' data = { 'callback': 'callback123', 'srcappid': '2919', 'clientver': '1000', 'clienttime': now_time, 'mid': '8b5710fdab09aea0e4649de3e430ad23', 'uuid': '8b5710fdab09aea0e4649de3e430ad23', 'dfid': '11S5Hd0E3dhq3jHxZ90dzFYU', 'keyword': keyword, 'page': '1', 'pagesize': '30', 'bitrate': '0', 'isfuzzy': '0', 'inputtype': '0', 'platform': 'WebFilter', 'userid': '0', 'iscorrection': '1', 'privilege_filter': '0', 'filter': '10', 'token': '', 'appid': '1014', 'signature': signature, } headers = { 'Referer': 'https://www.kugou.com/', 'User-Agent': 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/116.0.0.0 Safari/537.36', } response = requests.get(url=url, params=data, headers=headers) html_data = re.findall('callback123\((.*)\)', response.text)[0].replace(')', '') tb = pt.PrettyTable() tb.field_names = ['序号', '歌手', '歌名', '专辑', 'ID'] lis = [] num = 1 json_data = json.loads(html_data) for index in json_data['data']['lists']: SingerName = index['SingerName'] # 歌手 SongName = index['SongName'] # 歌名 AlbumName = index['AlbumName'] # 专辑 SongID = index['EMixSongID'] # ID dit = { '歌手': SingerName, '歌名': SongName, '专辑': AlbumName, 'ID': SongID, } tb.add_row([num, SingerName, SongName, AlbumName, SongID]) lis.append(dit) num += 1 print(tb) page = input('请输入你要下载的歌曲的序号: ') try: if page == '0': for li in lis: save(music_id=li['SongID']) else: save(music_id=lis[int(page)-1]['ID']) except Exception as e: print('输入有问题', e)

2025-09-17 · 2 min · wuhongbo