① 如何破解數據的校驗碼
校驗碼破解光這樣說是不能破解的,你要知道數據的演算法,才能知道校驗碼。
② 某軟體登陸需要手機簡訊驗證才能開始服務,求破解求思路
監聽驗證成功後從服務端發回來的數據包,然後下次驗證時直接在通訊過程中注入驗證成功的數據包,看看能否以此繞過驗證。如果驗證數據包加了時間戳和其他限制手段,還需要修改驗證數據包。需要多次抓包比較才能分析,數據包越多,越容易分析。
③ 校驗碼的演算法舉例
按照中華人民共和國國家標准GB11643-1999規定中華人民共和國公民身份號碼校驗碼的計算方法即為ISO 7064:1983.MOD 11-2校驗碼計演算法。
假設某一17位數字是 17位數字 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 加權因子 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 368
計算17位數字各位數字與對應的加權因子的乘積的和S:1×7+2×9+3×10+4×5+5×8+6×4+7×2+8×1+9×6+0×3+1×7+2×9+3×10+4×5+5×8+6×4+7×2=368; 計算S÷11的余數T:368 mod 11=5; 計算(12-T)÷11的余數R,如果R=10,校驗碼為字母「X」;如果R≠10,校驗碼為數字「R」:(12-5)mod 11=7。 該17位數字的校驗碼就是7,聚合在一為123456789012345677。
加權因子公式為Wi=2^(n-1)(mod 11),n為數字序列從右到左的從1開始的順序數。
序
ai 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 ?Wi 7 9 10 5 8 4 2 1 6 3 7 9 10 5 8 4 2 1 全國組織機構代碼由八位數字(或大寫拉丁字母)本體代碼和一位數字(或大寫拉丁字母)校驗碼組成。校驗碼按下列公式計算: 8 C9=11-MOD(∑Ci×Wi,11) i=1 MOD-表示求余函數;i-表示代碼字元從左至右位置序號;
Ci-表示第i位置上的代碼字元的值,採用下列「代碼字元集」所列字元;
C9-表示校驗碼;
Wi-表示第i位置上的加權因子,其數值如下表:
加權因子 i 1 2 3 4 5 6 7 8 Wi 3 7 9 10 5 8 4 2 當MOD函數值為1(即C9=10)時,校驗碼應用大寫拉丁字母「X」表示;當MOD函數值為0(即C9=11)時,校驗碼仍用「0」表示;當C9的值為1至9時,校驗碼直接用C9的值表示。
④ 求校驗碼演算法
提供之資料看看對你有啥幫助
CRC(Cyclic Rendancy Check)循環冗餘校驗碼
是常用的校驗碼,在早期的通信中運用廣泛,因為早期的通信技術不夠可靠(不可靠性的來源是通信技術決定的,比如電磁波通信時受雷電等因素的影響),不可靠的通信就會帶來『確認信息』的困惑,書上提到紅軍和藍軍通信聯合進攻山下的敵軍的例子,第一天紅軍發了條信息要藍軍第二天一起進攻,藍軍收到之後,發一條確認信息,但是藍軍擔心的是『確認信息』如果也不可靠而沒有成功到達紅軍那裡,那自己不是很危險?於是紅軍再發一條『對確認的確認信息』,但同樣的問題還是不能解決,紅軍仍然不敢冒然行動。
對通信的可靠性檢查就需要『校驗』,校驗是從數據本身進行檢查,它依靠某種數學上約定的形式進行檢查,校驗的結果是可靠或不可靠,如果可靠就對數據進行處理,如果不可靠,就丟棄重發或者進行修復。
CRC碼是由兩部分組成,前部分是信息碼,就是需要校驗的信息,後部分是校驗碼,如果CRC碼共長n個bit,信息碼長k個bit,就稱為(n,k)碼。 它的編碼規則是:
1、首先將原信息碼(kbit)左移r位(k+r=n)
2、運用一個生成多項式g(x)(也可看成二進制數)用模2除上面的式子,得到的余數就是校驗碼。
非常簡單,要說明的:模2除就是在除的過程中用模2加,模2加實際上就是我們熟悉的異或運算,就是加法不考慮進位,公式是:
0+0=1+1=0,1+0=0+1=1
即『異』則真,『非異』則假。
由此得到定理:a+b+b=a 也就是『模2減』和『模2加』直值表完全相同。
有了加減法就可以用來定義模2除法,於是就可以用生成多項式g(x)生成CRC校驗碼。
例如: g(x)=x4+x3+x2+1,(7,3)碼,信息碼110產生的CRC碼就是:
101
11101 | 110,0000
111 01
1 0100
1 1101
1001
余數是1001,所以CRC碼是110,1001
標準的CRC碼是,CRC-CCITT和CRC-16,它們的生成多項式是:
CRC-CCITT=x16+x12+x5+1
CRC-16=x16+x15+x2+1
⑤ 驗證碼識別程序目前哪個好哪種演算法識別率高
一般來說,這個需要針對你需要識別的類型來判斷需要的是哪種識別演算法。
⑥ 如何利用python 做驗證碼識別
用python加「驗證碼」為關鍵詞在里搜一下,可以找到很多關於驗證碼識別的文章。我大體看了一下,主要方法有幾類:一類是通過對圖片進行處理,然後利用字型檔特徵匹配的方法,一類是圖片處理後建立字元對應字典,還有一類是直接利用ocr模塊進行識別。不管是用什麼方法,都需要首先對圖片進行處理,於是試著對下面的驗證碼進行分析。
一、圖片處理
這個驗證碼中主要的影響因素是中間的曲線,首先考慮去掉圖片中的曲線。考慮了兩種演算法:
第一種是首先取到曲線頭的位置,即x=0時,黑點的位置。然後向後移動x的取值,觀察每個x下黑點的位置,判斷前後兩個相鄰黑點之間的距離,如果距離在一定范圍內,可以基本判斷該點是曲線上的點,最後將曲線上的點全部繪成白色。試了一下這種方法,結果得到的圖片效果很一般,曲線不能完全去除,而且容量將字元的線條去除。
第二種考慮用單位面積內點的密度來進行計算。於是首先計算單位面積內點的個數,將單位面積內點個數少於某一指定數的面積去除,剩餘的部分基本上就是驗證碼字元的部分。本例中,為了便於操作,取了5*5做為單位范圍,並調整單位面積內點的標准密度為11。處理後的效果:
二、字元驗證
這里我使用的方法是利用pytesser進行ocr識別,但由於這類驗證碼字元的不規則性,使得驗證結果的准確性並不是很高。具體哪位大牛,有什麼好的辦法,希望能給指點一下。
三、准備工作與代碼實例
1、PIL、pytesser、tesseract
(1)安裝PIL:下載地址:http:// www. pythonware. com/procts/pil/(2)pytesser:下載地址:http :/ /code. google. com/p/pytesser/,下載解壓後直接放在代碼相同的文件夾下,即可使用。
(3)Tesseract OCR engine下載:http: / / code.google. com/p/tesseract-ocr/,下載後解壓,找到tessdata文件夾,用其替換掉pytesser解壓後的tessdata文件夾即可。
2、具體代碼
復制代碼
#encoding=utf-8
###利用點的密度計算
import Image,ImageEnhance,ImageFilter,ImageDrawimport sys
from pytesser import *
#計算范圍內點的個數
def numpoint(im):
w,h = im.size
data = list( im.getdata() )
mumpoint=0
for x in range(w):
for y in range(h):
if data[ y*w + x ] !=255:#255是白色
mumpoint+=1
return mumpoint
#計算5*5范圍內點的密度
def pointmi(im):
w,h = im.size
p=[]
for y in range(0,h,5):
for x in range(0,w,5):
box = (x,y, x+5,y+5)
im1=im.crop(box)
a=numpoint(im1)
if a<11:##如果5*5范圍內小於11個點,那麼將該部分全部換為白色。
for i in range(x,x+5):
for j in range(y,y+5):
im.putpixel((i,j), 255)
im.save(r'img.jpg')
def ocrend():##識別
image_name = "img.jpg"
im = Image.open(image_name)
im = im.filter(ImageFilter.MedianFilter())enhancer = ImageEnhance.Contrast(im)
im = enhancer.enhance(2)
im = im.convert('1')
im.save("1.tif")
print image_file_to_string('1.tif')
if __name__=='__main__':
image_name = "1.png"
im = Image.open(image_name)
im = im.filter(ImageFilter.DETAIL)
im = im.filter(ImageFilter.MedianFilter())enhancer = ImageEnhance.Contrast(im)
im = enhancer.enhance(2)
im = im.convert('1')
##a=remove_point(im)
pointmi(im)
ocrend()
⑦ 識別驗證碼的演算法
一、驗證碼的基本知識
1. 驗證碼的主要目的是強制人機交互來抵禦機器自動化攻擊的。
2. 大部分的驗證碼設計者並不得要領,不了解圖像處理,機器視覺,模式識別,人工智慧
的基本概念。
3. 利用驗證碼,可以發財,當然要犯罪:比如招商銀行密碼只有6位,驗證碼形同虛設,計
算機很快就能破解一個有錢的賬戶,很多帳戶是可以網上交易的。
4. 也有設計的比較好的,比如Yahoo,Google,Microsoft等。而國內Tencent的中文驗證
碼雖然難,但算不上好。
二、人工智慧,模式識別,機器視覺,圖像處理的基本知識
1)主要流程:
比如我們要從一副圖片中,識別出驗證碼;比如我們要從一副圖片中,檢測並識別出一張
人臉。 大概有哪些步驟呢?
1.圖像採集:驗證碼呢,就直接通過HTTP抓HTML,然後分析出圖片的url,然後下載保存就
可以了。 如果是人臉檢測識別,一般要通過視屏採集設備,採集回來,通過A/D轉操作,存為
數字圖片或者視頻頻。
2.預處理:檢測是正確的圖像格式,轉換到合適的格式,壓縮,剪切出ROI,去除噪音,灰度
化,轉換色彩空間這些。
3.檢測:車牌檢測識別系統要先找到車牌的大概位置,人臉檢測系統要找出圖片中所有
的人臉(包括疑似人臉);驗證碼識別呢,主要是找出文字所在的主要區域。
4.前處理:人臉檢測和識別,會對人臉在識別前作一些校正,比如面內面外的旋轉,扭曲
等。我這里的驗證碼識別,「一般」要做文字的切割
5.訓練:通過各種模式識別,機器學習演算法,來挑選和訓練合適數量的訓練集。不是訓練
的樣本越多越好。過學習,泛化能力差的問題可能在這里出現。這一步不是必須的,有些識
別演算法是不需要訓練的。
6.識別:輸入待識別的處理後的圖片,轉換成分類器需要的輸入格式,然後通過輸出的類
和置信度,來判斷大概可能是哪個字母。識別本質上就是分類。
2)關鍵概念:
圖像處理:一般指針對數字圖像的某種數學處理。比如投影,鈍化,銳化,細化,邊緣檢測,
二值化,壓縮,各種數據變換等等。
1.二值化:一般圖片都是彩色的,按照逼真程度,可能很多級別。為了降低計算復雜度,
方便後續的處理,如果在不損失關鍵信息的情況下,能將圖片處理成黑白兩種顏色,那就最好
不過了。
2.細化:找出圖像的骨架,圖像線條可能是很寬的,通過細化將寬度將為1,某些地方可能
大於1。不同的細化演算法,可能有不同的差異,比如是否更靠近線條中間,比如是否保持聯通
行等。
3.邊緣檢測:主要是理解邊緣的概念。邊緣實際上是圖像中圖像像素屬性變化劇烈的地
方。可能通過一個固定的門限值來判斷,也可能是自適應的。門限可能是圖像全局的,也可
能是局部的。不能說那個就一定好,不過大部分時候,自適應的局部的門限可能要好點。被
分析的,可能是顏色,也可能是灰度圖像的灰度。
機器視覺:利用計算機來模式實現人的視覺。 比如物體檢測,定位,識別。按照對圖像
理解的層次的差別,分高階和低階的理解。
模式識別:對事物或者現象的某種表示方式(數值,文字,我們這里主要想說的是數值),
通過一些處理和分析,來描述,歸類,理解,解釋這些事物,現象及其某種抽象。
人工智慧:這種概念比較寬,上面這些都屬於人工智慧這個大的方向。簡單點不要過分
學院派的理解就是,把人類的很「智能」的東西給模擬出來協助生物的人來處理問題,特別是
在計算機裡面。
⑧ 請教自動識別驗證碼的演算法
如果能算出來,現在各網站早就不用驗證碼了!
原先曾有相關的OCR軟體可以識別出驗證碼的,所以現在的驗證碼上加了隨機雜點,就是為了產生干擾效果,防止被自動識別的。
⑨ 驗證碼 演算法問題
給你下面的代碼自己研究吧!!!using System;
using System.Collections;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Web;
using System.Web.Security;
using System.Web.UI;
using System.Web.UI.HtmlControls;
using System.Web.UI.WebControls;
using System.Web.UI.WebControls.WebParts;
using System.Xml.Linq;
using System.Drawing;public partial class 驗證 : System.Web.UI.Page
{
private void Page_Load(object sender, System.EventArgs e)
{
this.CreateCheckCodeImage(GenerateCheckCode());
}
#region Web 窗體設計器生成的代碼
override protected void OnInit(EventArgs e)
{
//
// CODEGEN: 該調用是 ASP.NET Web 窗體設計器所必需的。
//
InitializeComponent();
base.OnInit(e);
} /// <summary>
/// 設計器支持所需的方法 - 不要使用代碼編輯器修改
/// 此方法的內容。
/// </summary>
private void InitializeComponent()
{
this.Load += new System.EventHandler(this.Page_Load);
}
#endregion
private string GenerateCheckCode()
{
int number;
char code;
string checkCode = String.Empty;
System.Random random = new Random();
for (int i = 0; i < 6; i++)
{
number = random.Next();
if (number % 2 == 0)
code = (char)('0' + (char)(number % 10));
else
code = (char)('A' + (char)(number % 26));
checkCode += code.ToString();
}
Response.Cookies.Add(new HttpCookie("CheckCode", checkCode));
return checkCode;
}
private void CreateCheckCodeImage(string checkCode)
{
if (checkCode == null || checkCode.Trim() == String.Empty)
return;
System.Drawing.Bitmap image = new System.Drawing.Bitmap((int)Math.Ceiling((checkCode.Length * 12.5)), 22);
Graphics g = Graphics.FromImage(image);
try
{
//生成隨機生成器
Random random = new Random();
//清空圖片背景色
g.Clear(Color.White);
//畫圖片的背景噪音線
for (int i = 0; i < 25; i++)
{
int x1 = random.Next(image.Width);
int x2 = random.Next(image.Width);
int y1 = random.Next(image.Height);
int y2 = random.Next(image.Height);
g.DrawLine(new Pen(Color.Silver), x1, y1, x2, y2);
}
Font font = new System.Drawing.Font("Arial", 12, (System.Drawing.FontStyle.Bold | System.Drawing.FontStyle.Italic));
System.Drawing.Drawing2D.LinearGradientBrush brush = new System.Drawing.Drawing2D.LinearGradientBrush(new Rectangle(0, 0, image.Width, image.Height), Color.Blue, Color.DarkRed, 1.2f, true);
g.DrawString(checkCode, font, brush, 2, 2);
//畫圖片的前景噪音點
for (int i = 0; i < 100; i++)
{
int x = random.Next(image.Width);
int y = random.Next(image.Height);
image.SetPixel(x, y, Color.FromArgb(random.Next()));
}
//畫圖片的邊框線
g.DrawRectangle(new Pen(Color.Silver), 0, 0, image.Width - 1, image.Height - 1);
System.IO.MemoryStream ms = new System.IO.MemoryStream();
image.Save(ms, System.Drawing.Imaging.ImageFormat.Gif);
Response.ClearContent();
Response.ContentType = "image/Gif";
Response.BinaryWrite(ms.ToArray());
}
finally
{
g.Dispose();
image.Dispose();
}
}}
這個是生成的驗證碼 在你要驗證的textbox後面加上<img onclick="this.src='驗證.aspx';" src="驗證.aspx" alt="驗證碼"/>就會出現驗證碼了。 下面是驗證驗證碼是不是輸入正確 if (Request.Cookies["CheckCode"] == null)
{
lblMessage.Text = "您的瀏覽器設置已被禁用 Cookies,您必須設置瀏覽器允許使用 Cookies 選項後才能使用本系統。";
lblMessage.Visible = true;
return;
}
if (String.Compare(Request.Cookies["CheckCode"].Value, txtCheckCode.Text, true) != 0)
{
lblMessage.Text = "驗證碼錯誤,請輸入正確的驗證碼。";
lblMessage.Visible = true;
return; }
else
{
lblMessage.Text = "";
return;
}