做自動發貼程式-百度貼吧驗證碼演算法

來源:互聯網
上載者:User
百度|程式|演算法|驗證碼   首先,進入一個貼吧,比如"virus吧",地址是 http://post.baidu.com/f?kw=virus

圖1

  可以看到,頁面底部有一個表單,允許匿名發貼。如果要寫一個自動發貼的程式,唯一的痛點是驗證碼。

圖2


  接下來查看頁面源碼,發現驗證碼是個圖片,由指令碼產生。驗證碼圖片的連結是形如http://post-js.baidu.com/cgi-bin/c?[p1]&[p2]的樣子,其中p1和p2是兩個隨機整數。

圖3

  所有驗證碼圖片上面都有4個阿拉伯數字,夾雜一些噪音點。可惜這些噪音點不是隨機產生的,舉個例子,http://post-js.baidu.com/cgi-bin/c?0&0和http://post-js.baidu.com/cgi-bin/c?65536&0這兩個連結將產生兩幅完全相同的圖片。

  驗證圖片上面的數字是可以由產生它的連結地址直接計算出來的。公式的c代碼如下:

p1 >>= 8;
p2 >>= 8;
p1 = (p1 & 0xff)+((p1 >> 16) << 8);
p2 = (p2 & 0xff)+((p2 >> 16) << 8);
result = (p1 + (p2 << 16)) % 10000;


  圖3所示的連結地址可以產生圖2中的驗證碼,對於這個例子,連結中的兩個整數:

p1 = 695327974, p2 = 1581465364
p1 = p1/256 = 695327974/256 = 2716124
p2 = p2/256 = 1581465364/256 = 6177599
p1 = p1%256 + p1/65536*256 = 2716124%256 + 2716124/65536*256 = 10716
p2 = p2%256 + p2/65536*256 = 6177599%256 + 6177599/65536*256 = 24127
result = (p1 + p2*65536)%10000 = (10716 + 24127*65536)%10000 = 1581197788%10000 = 7788


  這就是圖2中的驗證碼7788。



相關文章

Alibaba Cloud 10 Year Anniversary

With You, We are Shaping a Digital World, 2009-2019

Learn more >

Apsara Conference 2019

The Rise of Data Intelligence, September 25th - 27th, Hangzhou, China

Learn more >

Alibaba Cloud Free Trial

Learn and experience the power of Alibaba Cloud with a free trial worth $300-1200 USD

Learn more >

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。