一句话让DeepSeek帮我写了个识别图形验证码的工具

admin 2025年2月5日23:51:43评论42 views字数 5030阅读16分46秒阅读模式
一句话让DeepSeek帮我写了个识别图形验证码的工具

国产AI DeepSeek受到全世界的广泛关注,甚至被认为是大模型行业的最大“黑马”。在这个AI时代,我们能做的就是主动拥抱AI。之前也尝试用其他的AI去写一些程序,哪怕比较简单的程序可能也需要调整很多次才能写出完整可运行的代码,如果涉及客户端GUI的开发,对于AI来说难度会更大。

最近在做验证码相关的项目,验证码是业务风控的关键一环,在注册、登录、下单、领券、兑换积分、营销等业务环节,需要验证码技术防范自动化脚本、爬虫等恶意行为。目前在对企业各产品使用的验证码进行安全强度评估,所以就想着让DeepSeek帮我写一个识别图形验证码的工具,结果真的大开眼界,一句话可输出直接运行的工具同时也说明传统的图形验证码在AI面前已无安全可言!

我输入的prompt:

你是一名优秀的python程序员。请你用python语言帮我写一个图形验证码的识别工具,工具要求包括:

1、用户输入图形验证码的URL,URL返回的是一个图片;

2、kimi的API接口,把图片传给kimi,让kimi识别图片中的字母和数字;调用kimi api接口的api_key在代码中可以让我手工配置;

3、输出结果要包含两个部分,一是原始的图片,二是以字符串的格式展示识别后的字母和数字;

4、工具要有GUI界面,界面要有科技感;

5、工具适用于windows操作系统。

DeepSeek的思考过程:

一句话让DeepSeek帮我写了个识别图形验证码的工具
最后不仅给出了代码还提供了使用说明:
一句话让DeepSeek帮我写了个识别图形验证码的工具
AI输出代码:
import tkinter as tkfrom tkinter import ttk, messageboximport requestsimport base64import osfrom io import BytesIOfrom PIL import Image, ImageTkclassCaptchaRecognizer(tk.Tk):    def __init__(self):super().__init__()        self.title("图形验证码识别工具-20250205")        self.geometry("800x600")        self.api_key = self.load_api_key()        self.configure_ui()        self.create_widgets()        self.setup_style()    def configure_ui(self):        self.grid_columnconfigure(0, weight=1)        self.grid_rowconfigure(2, weight=1)    def setup_style(self):        self.style = ttk.Style()        self.style.theme_create("cyber", settings={"TFrame": {"configure": {"background""#1a1a1a"}},"TLabel": {"configure": {"foreground""#00ff99""background""#1a1a1a","font": ("Consolas"10)}},"TButton": {"configure": {"background""#0066cc""foreground""white","font": ("Segoe UI"10), "borderwidth"1},"map": {"background": [("active""#0099ff")]}},"TEntry": {"configure": {"fieldbackground""#2d2d2d""foreground""white"}}        })        self.style.theme_use("cyber")    def load_api_key(self):if os.path.exists("ocr_api.key"):            with open("ocr_api.key""r"as f:return f.read().strip()return""    def save_api_key(self, key):        with open("ocr_api.key""w"as f:            f.write(key)    def create_widgets(self):        # 头部控制栏        control_frame = ttk.Frame(self)        control_frame.grid(row=0, column=0, padx=10, pady=10, sticky="ew")        ttk.Label(control_frame, text="API密钥:").pack(side=tk.LEFT, padx=5)        self.api_entry = ttk.Entry(control_frame, width=40)        self.api_entry.insert(0, self.api_key)        self.api_entry.pack(side=tk.LEFT, padx=5)        ttk.Button(control_frame, text="保存密钥",                   command=lambda: self.save_api_key(self.api_entry.get())).pack(side=tk.LEFT, padx=5)        # URL输入区域        url_frame = ttk.Frame(self)        url_frame.grid(row=1, column=0, padx=10, pady=5, sticky="ew")        ttk.Label(url_frame, text="验证码URL:").pack(side=tk.LEFT)        self.url_entry = ttk.Entry(url_frame, width=50)        self.url_entry.pack(side=tk.LEFT, padx=5, fill=tk.X, expand=True)        ttk.Button(url_frame, text="识别验证码", command=self.start_recognition).pack(side=tk.LEFT)        # 图片显示区域        self.img_frame = ttk.Frame(self)        self.img_frame.grid(row=2, column=0, padx=10, pady=10, sticky="nsew")        self.image_label = ttk.Label(self.img_frame)        self.image_label.pack()        # 结果展示区域        result_frame = ttk.Frame(self)        result_frame.grid(row=3, column=0, padx=10, pady=10, sticky="ew")        ttk.Label(result_frame, text="识别结果:").pack(side=tk.LEFT)        self.result_text = tk.Text(result_frame, height=3, bg="#2d2d2d", fg="#00ff99",                                   font=("Consolas"12), wrap=tk.WORD)        self.result_text.pack(fill=tk.X, expand=True)        # 状态栏        self.status_bar = ttk.Label(self, text="就绪", relief=tk.SUNKEN)        self.status_bar.grid(row=4, column=0, sticky="ew")    def start_recognition(self):        url = self.url_entry.get().strip()        api_key = self.api_entry.get().strip()if not url:            messagebox.showwarning("输入错误""请输入验证码URL地址")returnif not api_key:            messagebox.showwarning("配置错误""请先配置API密钥")return        self.status_bar.config(text="正在下载验证码...")        self.after(100, lambda: self.process_captcha(url, api_key))    def process_captcha(self, url, api_key):try:            # 下载验证码图片            response = requests.get(url, timeout=10)            response.raise_for_status()            # 转换图片格式            img = Image.open(BytesIO(response.content))            img = img.convert("RGB")            img.thumbnail((300300))            # 显示图片            photo = ImageTk.PhotoImage(img)            self.image_label.config(image=photo)            self.image_label.image = photo            # 转换为Base64            buffered = BytesIO()            img.save(buffered, format="JPEG")            img_str = base64.b64encode(buffered.getvalue()).decode()            # 调用OCR API            self.status_bar.config(text="正在调用OCR API...")            result = self.call_ocr_api(api_key, img_str)            # 显示结果            self.result_text.delete(1.0, tk.END)            self.result_text.insert(tk.END, result)            self.status_bar.config(text="识别完成")        except Exception as e:            messagebox.showerror("错误", f"处理过程中发生错误:{str(e)}")            self.status_bar.config(text="就绪")    def call_ocr_api(self, api_key, image_base64):        request_url = "https://aip.baidubce.com/rest/2.0/ocr/v1/general_basic"        params = {"image": image_base64}        access_token = api_key        request_url = request_url + "?access_token=" + access_token        headers = {'content-type''application/x-www-form-urlencoded'}        response = requests.post(request_url, data=params, headers=headers)return response.json()if __name__ == "__main__":    app = CaptchaRecognizer()    app.mainloop()
工具实现效果:
一句话让DeepSeek帮我写了个识别图形验证码的工具

原文始发于微信公众号(安全有术):一句话让DeepSeek帮我写了个识别图形验证码的工具

免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉。
  • 左青龙
  • 微信扫一扫
  • weinxin
  • 右白虎
  • 微信扫一扫
  • weinxin
admin
  • 本文由 发表于 2025年2月5日23:51:43
  • 转载请保留本文链接(CN-SEC中文网:感谢原作者辛苦付出):
                   一句话让DeepSeek帮我写了个识别图形验证码的工具https://cn-sec.com/archives/3702360.html
                  免责声明:文章中涉及的程序(方法)可能带有攻击性,仅供安全研究与教学之用,读者将其信息做其他用途,由读者承担全部法律及连带责任,本站不承担任何法律及连带责任;如有问题可邮件联系(建议使用企业邮箱或有效邮箱,避免邮件被拦截,联系方式见首页),望知悉.

发表评论

匿名网友 填写信息