算數驗證碼破解方式
阿新 • • 發佈:2021-08-12
計算型驗證碼
算數驗證碼,也叫計算型驗證碼。
計算型驗證碼其實是一種特殊的字元型驗證碼,只不過在它的基礎上增加了數字運算。
計算型驗證碼在將人類視覺和計算機視覺的差異作為區分使用者和電腦的依據的同時,還加上了邏輯運算,從而來增加機器識別的難度。
Python提供了專門的庫用於破解計算性驗證碼——Ddddocr
破解方式
Ddddocr其實是一種 OCR,可以將圖形識別後得到字串,字串中帶有運算子
第一步:安裝
pip install ddddocr
第二步:準備一張圖片,圖片命名為 '驗證碼.jpg'
第三步:使用Ddddocr
import ddddocr ocr= ddddocr.DdddOcr() with open('驗證碼.jpg', 'rb') as f: img_bytes = f.read() f.close() res = ocr.classification(img_bytes) print(res) # 47+40
第四步:編寫程式,對識別得到的字串進行運算
if'+'in res: zhi = int(res.split('+')[0])+int(res.split('+')[1][:-1]) print(zhi) if'-'in res: zhi = int(res.split('+')[0])-int(res.split('+')[1][:-1]) print(zhi) if'*'in res: zhi = int(res.split('+')[0])*int(res.split('+')[1][:-1]) print(zhi) if'/'in res: zhi = int(res.split('+')[0])/int(res.split('+')[1][:-1]) print(zhi)
第五步:大功告成
製作驗證碼
我們也可以自己編寫一個程式用於形成一個算數型驗證碼
from PIL import Image,ImageDraw,ImageFont import randomdef getRandomColor(): # 獲取一個隨機的rgb格式顏色 r = random.randint(0, 255) g = random.randint(0, 255) b = random.randint(0, 255) return (r,g,b) def getRandomStr(): # 獲取一個隨機字串,其中每個字元也是隨機的 num_random = str(random.randint(1,50)) return num_random text ='' for i in range(3): if i != 1: k = getRandomStr()+' ' else: k = random.choice(['+','-','*','/'])+' ' text += k text = text+' = ' # 獲取一個Image物件,引數分別是:RGB格式,寬120,高40,隨機顏色 image = Image.new('RGB',(160,40),(255,255,255)) # 獲取一個畫筆物件,將圖片物件傳過去 draw = ImageDraw.Draw(image) # 獲取一個font字型物件,引數是ttf的字型檔案的目錄,以及字型的大小 font = ImageFont.truetype(r'K:\msyh.ttc',size=24) # 在圖片上寫東西,引數是定位、字串、顏色和字型 draw.text((10,10),text,getRandomColor(),font=font) image.save('驗證碼.jpg')