欧美在线观看视频网站,亚洲熟妇色自偷自拍另类,啪啪伊人网,中文字幕第13亚洲另类,中文成人久久久久影院免费观看 ,精品人妻人人做人人爽,亚洲a视频

一種安全通訊的方法

文檔序號:7779691閱讀:221來源:國知局
一種安全通訊的方法
【專利摘要】本發(fā)明公開一種安全通訊的方法,屬于信息安全領(lǐng)域。所述方法包括:步驟1:讀卡器上電,判斷系統(tǒng)工作模式,如果是蘋果模式則進入蘋果設(shè)備認證流程,執(zhí)行步驟2;如果是USB模式則執(zhí)行步驟2;步驟2:等待接收命令,對命令的第一預(yù)設(shè)字節(jié)判斷,如果是第一預(yù)設(shè)值則執(zhí)行相應(yīng)操作;如果是第二預(yù)設(shè)值則根據(jù)初始加密密鑰、密鑰序列號和算法標識對應(yīng)的算法對命令進行解密,將解密后的命令發(fā)給卡片,執(zhí)行步驟3;步驟3:當接收到卡片返回的數(shù)據(jù)時,更新密鑰序列號,采用與算法標識對應(yīng)的算法、初始加密密鑰和更新后的密鑰序列號對卡片返回的數(shù)據(jù)進行加密,根據(jù)系統(tǒng)工作模式通過相應(yīng)的端口將加密后的卡片返回的數(shù)據(jù)發(fā)送給上位機。
【專利說明】—種安全通訊的方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明涉及信息安全領(lǐng)域,特別涉及一種安全通訊的方法。
【背景技術(shù)】
[0002]讀卡器是一種連接智能卡和主機的設(shè)備,需要配合智能卡使用,它的主要作用在于讀取智能卡內(nèi)部的數(shù)據(jù)或者向智能卡中寫入主機下發(fā)的數(shù)據(jù),完成智能卡與主機之間數(shù)據(jù)交互。
[0003]本發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)存在以下缺陷,在智能卡與主機之間進行數(shù)據(jù)交互的過程中,數(shù)據(jù)容易被截取、監(jiān)聽。

【發(fā)明內(nèi)容】

[0004]為解決現(xiàn)有技術(shù)中的缺陷,本發(fā)明提出一種安全通訊的方法,包括,
[0005]步驟S1:讀卡器上電,進行初始化;所述初始化包括將解密標識置位,初始化算法標識,將解密方式置為雙向解密;
[0006]步驟S2:判斷系統(tǒng)工作模式,如果是蘋果模式則執(zhí)行步驟S3 ;如果是USB模式則執(zhí)行步驟S4 ;
[0007]步驟S3:進入蘋果設(shè)備認證流程,判斷是否認證成功,是則執(zhí)行步驟S4 ;否則返回步驟S2 ;
[0008]步驟S4:所述讀卡器等待接收命令,當接收到命令時,判斷所述命令的第一預(yù)設(shè)字節(jié),如果是第一預(yù)設(shè)值則執(zhí)行步驟S5 ;如果是第二預(yù)設(shè)值則執(zhí)行步驟S6 ;如果是其他值,則執(zhí)行相應(yīng)操作,返回步驟S4 ;
[0009]步驟S5:根據(jù)所述命令的第二預(yù)設(shè)字節(jié)判斷命令類型,如果是第一命令,則根據(jù)所述第一命令設(shè)置所述解密標識、所述算法標識、所述解密方式,根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送第一響應(yīng),返回步驟S4;如果是第二命令,根據(jù)所述第二命令更新讀卡器中的初始加密密鑰和密鑰序列號,根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送第二響應(yīng),返回步驟S4 ;如果是第三命令則從所述讀卡器中獲取密鑰序列號,根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送第三響應(yīng),返回步驟S4 ;
[0010]步驟S6:判斷所述解密標識是否置位,是則執(zhí)行步驟S7 ;否則將所述接收到的命令發(fā)送給卡片,等待接收所述卡片返回的數(shù)據(jù),當所述讀卡器接收到所述卡片返回的數(shù)據(jù)時,根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送所述卡片返回的數(shù)據(jù),返回步驟S4;
[0011]步驟S7:判斷所述解密方式,如果是雙向解密則從所述讀卡器中獲取初始加密密鑰和所述密鑰序列號,根據(jù)所述初始加密密鑰和所述密鑰序列號計算解密密鑰,根據(jù)所述算法標識對應(yīng)的算法和所述解密密鑰對所述接收到的命令中的密文進行解密,得到解密后的命令,將所述解密后的命令發(fā)送給卡片,等待接收所述卡片返回的數(shù)據(jù),執(zhí)行步驟ssjn果是單向解密則將所述接收到的命令發(fā)送給卡片,等待接收所述卡片返回的數(shù)據(jù),執(zhí)行步驟S8 ;
[0012]步驟S8:當所述讀卡器接收到所述卡片返回的數(shù)據(jù)時,按照預(yù)設(shè)方式更新所述密鑰序列號,采用與所述算法標識對應(yīng)的算法、所述初始加密密鑰和所述密鑰序列號對所述卡片返回的數(shù)據(jù)進行加密,得到卡片返回數(shù)據(jù)的密文,根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送所述卡片返回數(shù)據(jù)的密文,返回步驟S4。
[0013]所述步驟S5中所述根據(jù)所述第二命令更新讀卡器中的初始加密密鑰和密鑰序列號,具體為,
[0014]所述讀卡器獲取初始加密密鑰,并將其作為當前密鑰,采用所述算法標識對應(yīng)的算法和所述當前密鑰對所述第二命令中的密文部分進行解密,得到第二命令的明文,驗證所述第二命令的明文是否合法,是則根據(jù)所述第二命令的明文更新所述讀卡器中的所述初始加密密鑰和所述密鑰序列號;否則根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機報錯,返回步驟S4。
[0015]所述讀卡器獲取初始加密密鑰,并將其作為當前密鑰,具體為,
[0016]判斷所述讀卡器中的是否存在初始加密密鑰,是則從所述讀卡器中獲取初始加密密鑰,并將其作為當前加密密鑰;否則將默認的初始加密密鑰作為當前加密密鑰。
[0017]所述驗證所述第二命令的明文是否合法,具體包括,
[0018]驗證所述第二命令的明文的長度是否合法,驗證所述第二命令的明文的填充字是否合法,驗證所述第二命令的明文中的校驗碼是否合法;
[0019]如果所述第二命令的明文的長度合法、所述填充字合法,并且所述校驗碼合法,則所述第二命令的明文合法;否則所述第二命令的明文不合法。
[0020]所述驗證所述第二命令的明文的長度是否合法具體為,判斷所述第二命令的明文的長度是否等于第一預(yù)設(shè)長度,是則所述第二明文的長度合法;否則根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送第一錯誤響應(yīng),返回步驟S4 ;
[0021]所述驗證所述第二命令的明文的填充字是否合法具體為,所述讀卡器從所述第二命令的明文中獲取填充字,判斷所述填充字是否與第六預(yù)設(shè)值匹配,是則所述填充字合法;否則根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送第二錯誤響應(yīng),返回步驟S4 ;
[0022]所述驗證所述第二命令的明文中的校驗碼是否合法具體為,所述讀卡器對所述第二命令的明文中的指定部分進行計算,得到校驗結(jié)果,從所述第二命令的明文中獲取校驗碼,判斷所述校驗碼與所述校驗結(jié)果是否相同,是則所述第二命令的明文中的校驗碼合法;否則根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送第三錯誤響應(yīng),返回步驟S4。
[0023]所述密鑰序列號中包括密鑰序列號的計數(shù)值;
[0024]所述按照預(yù)設(shè)方式更新所述密鑰序列號,具體為,更新所述密鑰序列號的計數(shù)值。
[0025]所述步驟S8中,所述采用與所述算法標識對應(yīng)的算法、所述初始加密密鑰和所述密鑰序列號對所述卡片返回的數(shù)據(jù)進行加密,具體為,
[0026]步驟Fl:所述讀卡器將所述卡片返回的數(shù)據(jù)轉(zhuǎn)碼成美國標準信息交換碼數(shù)據(jù),獲取所述美國標準信息交換碼數(shù)據(jù)刪除最后一個字節(jié)得到的數(shù)據(jù)的長度,將其作為第一長度;
[0027]步驟F2:用第一數(shù)據(jù)對所述第一長度做模運算,得到的計算結(jié)果作為第二長度;
[0028]步驟F3:從所述美國標準信息交換碼數(shù)據(jù)刪除最后一個字節(jié)得到的數(shù)據(jù)的低位端開始用第二長度的第二數(shù)據(jù)補位,得到補位后的數(shù)據(jù),采用與所述算法標識對應(yīng)的算法、所述初始加密密鑰和所述密鑰序列號對所述補位后的數(shù)據(jù)進行加密。
[0029]所述步驟SI中,所述初始化具體為:初始化算法標識,將解密標識置位;
[0030]所述步驟S5中所述如果是第一命令,則根據(jù)所述第一命令設(shè)置所述解密標識、所述算法標識、所述解密方式,具體為,如果是第一命令,則根據(jù)所述第一命令設(shè)置所述解密標識,所述算法標識;
[0031]所述步驟S6至步驟S8替換為步驟S6’至步驟S8’,
[0032]步驟S6’:判斷接收到的命令的指令字是否為預(yù)設(shè)值,是則將所述接收到命令發(fā)送給所述卡片,等待接收所述卡片返回的數(shù)據(jù),執(zhí)行步驟S8’ ;否則從所述讀卡器中獲取所述初始加密密鑰和所述密鑰序列號,根據(jù)所述初始加密密鑰和所述密鑰序列號計算解密密鑰,采用所述算法標識對應(yīng)的算法和所述解密密鑰對所述接收到的命令進行解密,得到解密結(jié)果,執(zhí)行步驟S7’ ;
[0033]步驟S7’:判斷所述解密結(jié)果的指令字是否為預(yù)設(shè)值,是則將所述解密標識置位,將所述解密結(jié)果發(fā)送給所述卡片,等待接收所述卡片返回的數(shù)據(jù),執(zhí)行步驟S8’ ;否則根據(jù)所述系統(tǒng)工作模式采用相應(yīng)的端口向上位機發(fā)送接收到的數(shù)據(jù)不支持此操作的響應(yīng),返回步驟S2 ;
[0034]步驟S8,:當所述讀卡器接收到所述卡片返回的數(shù)據(jù)時,判斷所述解密標識是否置位,是則將所述解密標識復(fù)位,從所述讀卡器中獲取所述初始加密密鑰和所述密鑰序列號,按照預(yù)設(shè)方式更新所述密鑰序列號,根據(jù)所述初始加密密鑰和所述密鑰序列號計算加密密鑰,將所述密鑰序列號作為所述讀卡器中更新后的所述密鑰序列號,根據(jù)所述加密密鑰和所述算法標識對應(yīng)的算法對所述卡片返回的數(shù)據(jù)進行加密,得到加密結(jié)果,根據(jù)所述系統(tǒng)工作模式采用相應(yīng)的端口向上位機發(fā)送所述加密結(jié)果,返回步驟S2。
[0035]所述步驟SI中所述初始化,還包括,打開中斷,所述中斷包括,蘋果端口接收數(shù)據(jù)中斷和USB端口接收數(shù)據(jù)中斷;
[0036]當所述讀卡器通過蘋果端口接收到數(shù)據(jù)時,進入蘋果端口接收數(shù)據(jù)中斷;所述蘋果端口接收數(shù)據(jù)中斷,具體包括,
[0037]步驟Gl:判斷蘋果端口接收中斷標識是否置位,是則執(zhí)行步驟G2 ;否則退出蘋果端口接收數(shù)據(jù)中斷;
[0038]步驟G2:清除中斷標識,判斷接收數(shù)據(jù)是否完成,是則將蘋果端口接收數(shù)據(jù)完成標識置位,退出蘋果端口接收數(shù)據(jù)中斷;否則退出蘋果端口接收數(shù)據(jù)中斷;
[0039]當所述讀卡器通過USB端口接收到數(shù)據(jù)時,進入USB接收數(shù)據(jù)中斷;所述USB接收數(shù)據(jù)中斷具體包括,
[0040]步驟Hl:判斷USB接收數(shù)據(jù)中斷標識是否置位,是則執(zhí)行步驟H2 ;否則退出USB接收數(shù)據(jù)中斷;
[0041]步驟H2:清除中斷標識,判斷接收數(shù)據(jù)是否完成,是則將USB接收數(shù)據(jù)完成標識置位,退出USB接收數(shù)據(jù)中斷;否則退出USB接收數(shù)據(jù)中斷;
[0042]所述步驟S2至步驟S4替換為步驟S2’至步驟S4’:
[0043]步驟S2’:所述讀卡器判斷蘋果端口接收數(shù)據(jù)完成標識是否置位,是則將所述蘋果端口接收數(shù)據(jù)完成標識復(fù)位,將蘋果端口發(fā)送數(shù)據(jù)標識置位,執(zhí)行步驟S4’ ;否則執(zhí)行步驟S3,;
[0044]步驟S3’:判斷USB接收數(shù)據(jù)完成標識是否置位,是則將所述USB接收數(shù)據(jù)完成標識復(fù)位,將USB發(fā)送數(shù)據(jù)標識置位,執(zhí)行步驟S4’ ;否則返回步驟S2’ ;
[0045]步驟S4,:判斷接收到的命令的第一預(yù)設(shè)字節(jié),如果是第一預(yù)設(shè)值則執(zhí)行步驟S5 ;如果是第二預(yù)設(shè)值則執(zhí)行步驟S6’ ;如果是其他值,則執(zhí)行相應(yīng)操作,返回步驟S2’ ;
[0046]所述步驟S7’中,所述根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送接收到的數(shù)據(jù)不支持此操作的響應(yīng),返回步驟S2,替換為步驟S7’ -1至步驟S7’ -2,
[0047]步驟S7,-1:判斷所述蘋果端口發(fā)送數(shù)據(jù)標識是否置位,是則將所述蘋果端口發(fā)送數(shù)據(jù)標識復(fù)位,通過所述蘋果端口向上位機發(fā)送接收到的數(shù)據(jù)不支持此操作的響應(yīng),返回步驟S3’ ;否則執(zhí)行步驟S7’ -2 ;
[0048]步驟S7’_2:判斷所述USB發(fā)送數(shù)據(jù)標識是否置位,是則將所述USB發(fā)送數(shù)據(jù)標識復(fù)位,通過所述USB端口向上位機發(fā)送接收到的數(shù)據(jù)不支持此操作的響應(yīng),返回步驟S2’ ;否則返回步驟S2;
[0049]所述步驟S5中,所述返回步驟S4替換為返回步驟S2’ ;
[0050]所述步驟S8’中,所述根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送所述加密結(jié)果,返回步驟S2,替換為步驟S8’ -1至步驟S8’ -2,
[0051]步驟S8,-1:判斷所述蘋果發(fā)送數(shù)據(jù)標識是否置位,是則將所述蘋果發(fā)送數(shù)據(jù)標識復(fù)位,通過所述蘋果端口向上位機發(fā)送所述加密結(jié)果,返回步驟S3’ ;否則執(zhí)行步驟S8,-2 ;
[0052]步驟S8’_2:判斷所述USB發(fā)送數(shù)據(jù)標識是否置位,是則將所述USB發(fā)送數(shù)據(jù)標識復(fù)位,通過所述USB端口向上位機發(fā)送所述加密結(jié)果,返回步驟S2’ ;否則返回步驟S2’。
[0053]所述從所述第二命令的明文中獲取填充字,具體為,
[0054]從所述第二命令的明文的第三預(yù)設(shè)字節(jié)開始獲取第二預(yù)設(shè)長度的數(shù)據(jù),將其作為填充字。
[0055]所述從所述第二命令的明文中獲取校驗碼,具體為,
[0056]從所述第二命令的明文的第四預(yù)設(shè)字節(jié)開始獲取第四預(yù)設(shè)長度的數(shù)據(jù),將其作為校驗碼。
[0057]所述第二命令的明文中的指定部分,具體為,
[0058]所述從第二命令的明文的第一預(yù)設(shè)字節(jié)開始獲取第三預(yù)設(shè)長度的數(shù)據(jù)。
[0059]所述從所述第二命令的明文中獲取初始加密密鑰和密鑰序列號,具體包括,
[0060]從所述第二命令的明文的第一預(yù)設(shè)字節(jié)開始獲取第五預(yù)設(shè)長度的數(shù)據(jù),將其作為初始加密密鑰,從所述第二命令的明文的第五預(yù)設(shè)字節(jié)開始獲取第六預(yù)設(shè)長度的數(shù)據(jù),將其作為密鑰序列號。
[0061]所述根據(jù)所述系統(tǒng)工作模式采用相應(yīng)的端口,具體為,
[0062]判斷所述系統(tǒng)工作模式,如果是蘋果模式,則采用蘋果端口 ;如果是USB模式,則采用USB端口。
[0063]所述步驟S2中所述判斷系統(tǒng)工作模式具體為,
[0064]步驟Yl:所述讀卡器判斷是否通過蘋果端口與上位機建立連接,是則系統(tǒng)工作模式為蘋果模式;否則執(zhí)行步驟Y2 ;[0065]步驟Y2:判斷是否通過USB端口與上位機建立連接,是則所述系統(tǒng)工作模式為USB模式;否則預(yù)設(shè)時間后返回步驟Yl。
[0066]所述判斷系統(tǒng)工作模式具體為,
[0067]步驟Yl ’:所述讀卡器判斷是否通過USB端口與上位機建立連接,是則所述系統(tǒng)工作模式為USB模式,否則執(zhí)行步驟Y2’ ;
[0068]步驟Y2’:判斷是否通過蘋果端口與上位機建立連接,是則所述系統(tǒng)工作模式為蘋果模式;否則預(yù)設(shè)時間后返回步驟Y1’。
[0069]本發(fā)明的有益效果為,采用本發(fā)明提供的方法,讀卡器與上位機之間協(xié)商密鑰之后,更新密鑰,利用更新后的密鑰對數(shù)據(jù)進行加密或解密,從而提高數(shù)據(jù)通訊的安全性。
【專利附圖】

【附圖說明】
[0070]圖1、圖2-1和圖2-2為本發(fā)明實施例1提供的一種安全通訊的方法流程圖;
[0071]圖3-1、3_2為本發(fā)明實施例2提供的一種自動判斷解密方式的方法流程圖;
[0072]圖4-1和圖4-2為本發(fā)明實施例3提供的一種自動判斷解密方式的方法流程圖;
[0073]圖5為蘋果端口接收數(shù)據(jù)中斷的處理方法流程圖;
[0074]圖6為USB接收數(shù)據(jù)中斷的處理方法流程圖。
【具體實施方式】
[0075]下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。基于本發(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
[0076]本發(fā)明實施例提供一種安全通訊的方法,應(yīng)用于讀卡器對上位機下發(fā)的已加密命令進行解密,將解密后的命令發(fā)送給卡片,當卡片返回數(shù)據(jù)時,讀卡器對卡片返回數(shù)據(jù)進行加密,并將加密后的數(shù)據(jù)發(fā)送給上位機。
[0077]實施例1
[0078]本實施例提供一種安全通訊的方法,如圖1所示,具體包括:
[0079]步驟Kl:讀卡器上電,進行初始化;
[0080]步驟K2:判斷系統(tǒng)工作模式,如果是蘋果模式則執(zhí)行步驟K3 ;如果是USB模式則執(zhí)行步驟K5 ;
[0081]本實施例中,優(yōu)選的,系統(tǒng)工作模式初始為USB模式;判斷系統(tǒng)工作模式的方法具體為,讀卡器上電進行初始化之后,判斷是否通過蘋果端口與蘋果設(shè)備建立連接,是則系統(tǒng)工作模式為蘋果模式,否則判斷是否通過USB端口與USB設(shè)備建立連接,是則系統(tǒng)工作模式為USB模式;否則預(yù)設(shè)時間后繼續(xù)判斷是否通過蘋果端口與蘋果設(shè)備建立連接;
[0082]或者,讀卡器上電進行初始化之后,判斷是否通過USB端口與USB設(shè)備建立連接,是則系統(tǒng)工作模式為USB模式,否則判斷是否通過蘋果端口與蘋果設(shè)備建立連接,是則系統(tǒng)工作模式為蘋果模式;否則預(yù)設(shè)時間后繼續(xù)判斷是否通過USB端口與USB設(shè)備建立連接。
[0083]步驟K3:進入蘋果設(shè)備認證流程,判斷是否認證成功,是則執(zhí)行步驟K4 ;否則返回步驟K2 ;[0084]步驟K4:進入處理蘋果數(shù)據(jù)流程,返回步驟K2 ;
[0085]步驟K5:進入處理USB數(shù)據(jù)流程,返回步驟K2。
[0086]參見圖2-1和圖2-2,本實施例中,處理USB數(shù)據(jù)的方法和處理蘋果數(shù)據(jù)的方法相同,具體包括,
[0087]步驟101:讀卡器等待接收命令;
[0088]本實施例中,讀卡器通過蘋果端口接收命令或通過USB端口接收命令。
[0089]步驟102:當接收到命令時,判斷接收到的命令的第一預(yù)設(shè)字節(jié)的取值;如果是第一預(yù)設(shè)值,則執(zhí)行步驟103至步驟117 ;如果是第二預(yù)設(shè)值,則執(zhí)行步驟118至步驟126,如果是其他值,則執(zhí)行相應(yīng)操作,返回步驟101 ;
[0090]本實施例中,優(yōu)選的,第一預(yù)設(shè)字節(jié)為命令的第一字節(jié),第一預(yù)設(shè)值為0x6B,第二預(yù)設(shè)值為0x6F。
[0091]步驟103:根據(jù)命令的第二預(yù)設(shè)字節(jié)的取值判斷命令類型,如果是第一命令,則執(zhí)行步驟104 ;如果是第二命令,則執(zhí)行步驟106 ;如果是第三命令,則執(zhí)行步驟116 ;
[0092]本實施例中,如果命令的第二預(yù)設(shè)字節(jié)的取值等于第三預(yù)設(shè)值,則為第一命令;
[0093]如果命令的第二預(yù)設(shè)字節(jié)的取值等于第四預(yù)設(shè)值,則為第二命令;
[0094]其中,第二命令中包含命令頭和密文部分,密文部分由KSN (Key Serial Number,密鑰序列號)、IPEK (Initial Pin Encryption,初始加密密鑰)、填充字和校驗碼組成;
[0095]如果命令的第二預(yù)設(shè)字節(jié)的取值等于第五預(yù)設(shè)值,則為第三命令;
[0096]優(yōu)選的,第二預(yù)設(shè)字節(jié)為命令的第十一至第十二字節(jié),第三預(yù)設(shè)值為0x5B01,第四預(yù)設(shè)值為0x5B02,第五預(yù)設(shè)值為0x5B03。
[0097]當讀卡器接收到第一命令時,執(zhí)行步驟104至步驟105,實現(xiàn)讀卡器設(shè)置其內(nèi)部的解密標識、算法標識和解密方式;
[0098]步驟104:設(shè)置解密標識、算法標識、解密方式;
[0099]本實施例中,讀卡器中設(shè)置有解密標識、算法標識、解密方式。其中,解密標識為復(fù)位或置位,解密標識復(fù)位表示失能解密,解密標識置位表示使能解密;算法標識包括第一算法標識和第二算法標識,優(yōu)選的,第一算法標識對應(yīng)3DES算法,第二算法標識對應(yīng)AES算法;解密方式包括單向解密和雙向解密;優(yōu)選的,讀卡器進行初始化時將解密標識復(fù)位,將算法標識置為第一算法標識,將解密方式置為雙向解密。
[0100]步驟105:判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送解密初始化完成響應(yīng),返回步驟101 ;如果是USB模式,則通過USB端口向上位機發(fā)送解密初始化完成響應(yīng),返回步驟101 ;
[0101]本實施例中,解密初始化完成響應(yīng)中包括解密初始化狀態(tài)字,當解密初始化狀態(tài)字為0x9000時,表示設(shè)置解密標識、算法標識、解密方式成功,當解密初始化狀態(tài)字為其他值時,表示設(shè)置解密標識、算法標識、解密方式失敗。
[0102]當讀卡器接收到第二命令時,執(zhí)行步驟106至步驟115,實現(xiàn)讀卡器設(shè)置其內(nèi)部的KSN 和 IPEK ;
[0103]步驟106:判斷flash (閃存)中IPEK的長度是否為0,是則執(zhí)行步驟107 ;否則執(zhí)行步驟108 ;
[0104]步驟107:將默認的IPEK作為當前密鑰,采用與算法標識對應(yīng)的算法和當前密鑰對第二命令中的密文部分進行解密,得到第二命令的明文,執(zhí)行步驟109 ;
[0105]本實施例中,默認的IPEK的長度為16字節(jié);
[0106]步驟108:獲取flash中的IPEK并將其作為當前密鑰,采用與算法標識對應(yīng)的算法和當前密鑰對第二命令中的密文部分進行解密,得到第二命令的明文,執(zhí)行步驟109 ;
[0107]優(yōu)選的,第二命令的明文包括IPEK、KSN、填充字、校驗碼,其中IPEK的長度為16個字節(jié),KSN的長度為10個字節(jié),填充字的長度為2個字節(jié),校驗碼的長度為4個字節(jié);
[0108]步驟109:判斷第二命令中的明文的長度是否等于第一預(yù)設(shè)長度,是則執(zhí)行步驟110 ;否則判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送第一錯誤響應(yīng),返回步驟101 ;如果是USB模式,則通過USB端口向上位機發(fā)送第一錯誤響應(yīng),返回步驟101 ;
[0109]本實施例中,第一預(yù)設(shè)長度為32個字節(jié),第一錯誤響應(yīng)為0X6700 ;
[0110]步驟110:從第二命令的明文中獲取填充字;
[0111]本實施例中,從第二命令的明文的第三預(yù)設(shè)字節(jié)開始獲取第二預(yù)設(shè)長度的數(shù)據(jù),將其作為填充字;
[0112]其中,第三預(yù)設(shè)字節(jié)為第二命令的明文的第二十七字節(jié),第二預(yù)設(shè)長度為2個字節(jié)。
[0113]步驟111:判斷填充字是否為合法,是則執(zhí)行步驟112 ;否則判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送第二錯誤響應(yīng),返回步驟101 ;如果是USB模式,則通過USB端口向上位機發(fā)送第二錯誤響應(yīng),返回步驟101 ;
[0114]本實施例中,根據(jù)填充字的取值判斷填充字是否合法,具體為,如果填充字的取值等于第六預(yù)設(shè)值,則表示填充字合法;否則表示填充字不合法;其中,第六預(yù)設(shè)值為OxFFFF ;
[0115]步驟112:對第二命令的明文的指定部分進行計算得到校驗結(jié)果;
[0116]本實施例中,第二命令的明文的指定部分具體為,第二命令的明文中除校驗碼以外的部分,即第二命令的明文的KSN明文、IPEK明文和填充字部分;
[0117]具體地,讀卡器對從第二命令的明文的第一預(yù)設(shè)字節(jié)開始獲取第三預(yù)設(shè)長度的數(shù)據(jù),對獲取到的數(shù)據(jù)進行計算,得到的計算結(jié)果為校驗結(jié)果。其中,第三預(yù)設(shè)長度為28個字節(jié)。
[0118]步驟113:從第二命令的明文中獲取校驗碼,判斷校驗結(jié)果與校驗碼是否相同,是則執(zhí)行步驟114 ;否則判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送第三錯誤響應(yīng),返回步驟101 ;如果是USB模式,則通過USB端口向上位機發(fā)送第三錯誤響應(yīng),返回步驟101 ;
[0119]本實施例中,從第二命令的明文的第四預(yù)設(shè)字節(jié)開始獲取第四預(yù)設(shè)長度的數(shù)據(jù),將其作為校驗碼;其中,第四預(yù)設(shè)字節(jié)為第二命令的明文的第二十九字節(jié),第四預(yù)設(shè)長度為4個字節(jié)。
[0120]步驟114:從第二命令的明文中獲取KSN明文和IPEK明文,用KSN明文和IPEK明文分別替換flash中的KSN和IPEK ;
[0121]具體地,從第二命令的明文的第一預(yù)設(shè)字節(jié)開始獲取第五預(yù)設(shè)長度的數(shù)據(jù),將其作為IPEK,從第二命令的明文的第五預(yù)設(shè)字節(jié)開始獲取第六預(yù)設(shè)長度的數(shù)據(jù),將其作為KSN0其中,第五預(yù)設(shè)字節(jié)為第二命令的明文的第十七字節(jié),第五預(yù)設(shè)長度為16個字節(jié),第六預(yù)設(shè)長度為10個字節(jié)。
[0122]步驟115:判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送寫A KSN和IPEK響應(yīng),返回步驟101 ;如果是USB模式,則通過USB端口向上位機發(fā)送寫入KSN和IPEK響應(yīng),返回步驟101 ;
[0123]當讀卡器接收到第三命令時,執(zhí)行步驟116至步驟117,實現(xiàn)將讀卡器內(nèi)部的KSN返回給上位機;
[0124]步驟116:從 flash 中獲取 KSN ;
[0125]步驟117:判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送KSN響應(yīng),返回步驟101,如果是USB模式,則通過USB端口向上位機發(fā)送KSN響應(yīng),返回步驟 101 ;
[0126]本實施例中,KSN響應(yīng)包括KSN和獲取KSN狀態(tài)字。獲取KSN狀態(tài)字為0x9000時,表示獲取KSN成功,獲取KSN狀態(tài)字為其他值時,表示獲取KSN失敗。
[0127]當讀卡器接收到的命令的第一個字節(jié)的取值為第二預(yù)設(shè)值時,執(zhí)行步驟118至步驟126,實現(xiàn)讀卡器解密上位機下發(fā)的命令,將解密后的命令發(fā)送給卡片;讀卡器將卡片返回數(shù)據(jù)進行加密,將加密后的卡片返回數(shù)據(jù)發(fā)送給上位機;
[0128]步驟118:判斷解密標識是否置位,是則執(zhí)行步驟119 ;否則執(zhí)行步驟125 ;
[0129]本實施例中,解密標識置位表示解密使能,即需要對接收到的命令進行解密,此時收到的命令由密文構(gòu)成;解密標識未置位標識解密失能,即不需要對接收到的命令進行解密,此時收到的命令由明文構(gòu)成;
[0130]步驟119:判斷解密方式,如果是雙向解密,則執(zhí)行步驟120 ;如果是單向解密,則將命令發(fā)送給卡片,執(zhí)行步驟122 ;
[0131]步驟120:獲取flash中的IPEK和KSN,根據(jù)IPEK和KSN計算解密密鑰,執(zhí)行步驟121 ;
[0132]本實施例中,KSN的后21比特為counter值,counter值的初始值為O。按照預(yù)設(shè)方式更新KSN具體為,從flash中獲取KSN,獲取KSN中的counter值,將counter值加I的結(jié)果替換原來的counter值,KSN中的其他部分不變,用得到的KSN更新原來的KSN。
[0133]步驟121:根據(jù)算法標識獲取算法標識對應(yīng)的算法,采用所述算法和所述解密密鑰對命令中的密文進行解密,得到解密后的命令,將解密后的命令發(fā)送給卡片,執(zhí)行步驟122 ;
[0134]步驟122:等待接收卡片返回的數(shù)據(jù);
[0135]步驟123:當讀卡器收到卡片返回的數(shù)據(jù)時,將與算法標識對應(yīng)算法作為當前算法,按照預(yù)設(shè)方式更新KSN,并用更新后的KSN替換flash中的KSN ;
[0136]步驟124:根據(jù)IPEK、更新后的KSN和當前算法對卡片返回的數(shù)據(jù)進行加密,得到卡片返回數(shù)據(jù)的密文,判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送卡片返回數(shù)據(jù)的密文,返回步驟101 ;如果是USB模式,則通過USB端口向上位機發(fā)送卡片返回數(shù)據(jù)的密文,返回步驟101 ;
[0137]具體地,讀卡器將卡片數(shù)據(jù)轉(zhuǎn)碼成ASCII碼(American Standard Code forInformation Interchange,美國標準信息交換碼)數(shù)據(jù),去掉ASCII碼數(shù)據(jù)的最后一個字節(jié)數(shù)據(jù),獲取去掉最后一個字節(jié)數(shù)據(jù)的ASCII碼數(shù)據(jù)的長度作為第一長度,用第一數(shù)據(jù)對第一長度做模運算,得到的計算結(jié)果作為第二長度,從去掉最后一個字節(jié)數(shù)據(jù)的ASCII碼數(shù)據(jù)的低位端開始用長度為第二長度的第二數(shù)據(jù)補位,使得補位之后的數(shù)據(jù)的長度為8個字節(jié)長度的整數(shù)倍,然后對補位之后的數(shù)據(jù)進行加密得到密文,將密文發(fā)送給上位機;
[0138]優(yōu)選的,第一數(shù)據(jù)為8,第二數(shù)據(jù)為OxFF,低位端為右端。
[0139]步驟125:將接收到的命令發(fā)送給卡片,等待接收卡片返回的數(shù)據(jù);
[0140]步驟126:當讀卡器收到卡片返回的數(shù)據(jù)時,判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送卡片返回的數(shù)據(jù),返回步驟101 ;如果是USB模式,則通過USB端口向上位機發(fā)送卡片返回的數(shù)據(jù),返回步驟101。
[0141]實施例2
[0142]本發(fā)明實施例2提供的讀卡器處理數(shù)據(jù)的方法,其中,該數(shù)據(jù)可以是通過USB端口接收,也可以是通過蘋果接口接收,具體如圖3-1、圖3-2所示,包括,
[0143]步驟201:讀卡器等待接收命令;
[0144]本實施例中,讀卡器通過蘋果端口接收命令或通過USB端口接收命令。
[0145]步驟202:當接收到命令時,判斷接收到的命令的第一預(yù)設(shè)字節(jié)的取值;如果是第一預(yù)設(shè)值,則執(zhí)行步驟203至步驟217 ;如果是第二預(yù)設(shè)值,則執(zhí)行步驟218至步驟229,如果是其他值,則執(zhí)行相應(yīng)操作,返回步驟201 ;
[0146]本實施例中,優(yōu)選的,第一預(yù)設(shè)字節(jié)為命令的第一字節(jié),第一預(yù)設(shè)值為0x6B,第二預(yù)設(shè)值為0x6F。
[0147]步驟203:根據(jù)命令的第二預(yù)設(shè)字節(jié)的取值判斷命令類型,如果是第一命令,則執(zhí)行步驟204 ;如果是第二命令,則執(zhí)行步驟206 ;如果是第三命令,則執(zhí)行步驟216 ;
[0148]本實施例中,如果命令的第二預(yù)設(shè)字節(jié)的取值等于第三預(yù)設(shè)值,則為第一命令;
[0149]如果命令的第二預(yù)設(shè)字節(jié)的取值等于第四預(yù)設(shè)值,則為第二命令;
[0150]其中,第二命令中包含命令頭和密文部分,密文部分由KSN (Key Serial Number,密鑰序列號)、IPEK (Initial Pin Encryption,初始加密密鑰)、填充字和校驗碼組成;
[0151]如果命令的第二預(yù)設(shè)字節(jié)的取值等于第五預(yù)設(shè)值,則為第三命令;
[0152]優(yōu)選的,第二預(yù)設(shè)字節(jié)為命令的第十一至第十二字節(jié),第三預(yù)設(shè)值為0x5B01,第四預(yù)設(shè)值為0x5B02,第五預(yù)設(shè)值為0x5B03。
[0153]當讀卡器接收到第一命令時,執(zhí)行步驟204至步驟205,實現(xiàn)讀卡器設(shè)置其內(nèi)部的解密標識、算法標識;
[0154]步驟204:設(shè)置解密標識、算法標識;
[0155]本實施例中,讀卡器中設(shè)置有解密標識、算法標識。其中,解密標識為復(fù)位或置位,解密標識復(fù)位表示失能解密,解密標識置位表示使能解密;算法標識包括第一算法標識和第二算法標識,優(yōu)選的,第一算法標識對應(yīng)3DES算法,第二算法標識對應(yīng)AES算法;優(yōu)選的,讀卡器進行初始化時將解密標識復(fù)位,將算法標識置為第一算法標識。
[0156]具體地,根據(jù)第一命令將解密標識置位,將算法標識置為第一算法標識或者第二算法標識。
[0157]步驟205:判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送解密初始化完成響應(yīng),返回步驟201 ;如果是USB模式,則通過USB端口向上位機發(fā)送解密初始化完成響應(yīng),返回步驟201 ;
[0158]本實施例中,解密初始化完成響應(yīng)中包括解密初始化狀態(tài)字,當解密初始化狀態(tài)字為0x9000時,表示設(shè)置解密標識、算法標識成功,當解密初始化狀態(tài)字為其他值時,表示設(shè)置解密標識、算法標識失敗。
[0159]當讀卡器接收到第二命令時,執(zhí)行步驟206至步驟215,實現(xiàn)讀卡器設(shè)置其內(nèi)部的KSN 和 IPEK ;
[0160]步驟206:判斷flash (閃存)中IPEK的長度是否為0,是則執(zhí)行步驟207 ;否則執(zhí)行步驟208 ;
[0161]步驟207:將默認的IPEK作為當前密鑰,采用與算法標識對應(yīng)的算法和當前密鑰對第二命令中的密文部分進行解密,得到第二命令的明文,執(zhí)行步驟209 ;
[0162]本實施例中,默認的IPEK的長度為16字節(jié);
[0163]步驟208:獲取flash中的IPEK并將其作為當前密鑰,采用與算法標識對應(yīng)的算法和當前密鑰對第二命令中的密文部分進行解密,得到第二命令的明文,執(zhí)行步驟209 ;
[0164]優(yōu)選的,第二命令的明文包括IPEK、KSN、填充字、校驗碼,其中IPEK的長度為16個字節(jié),KSN的長度為10個字節(jié),填充字的長度為2個字節(jié),校驗碼的長度為4個字節(jié);
[0165]步驟209:判斷第二命令中的明文的長度是否等于第一預(yù)設(shè)長度,是則執(zhí)行步驟210 ;否則判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送第一錯誤響應(yīng),返回步驟201 ;如果是USB模式,則通過USB端口向上位機發(fā)送第一錯誤響應(yīng),返回步驟201 ;
[0166]本實施例中,第一預(yù)設(shè)長度為32個字節(jié),第一錯誤響應(yīng)為0X6700 ;
[0167]步驟210:從第二命令的明文中獲取填充字;
[0168]本實施例中,從第二命令的明文的第三預(yù)設(shè)字節(jié)開始獲取第二預(yù)設(shè)長度的數(shù)據(jù),將其作為填充字;
[0169]其中,第三預(yù)設(shè)字節(jié)為第二命令的明文的第二十七字節(jié),第二預(yù)設(shè)長度為2個字節(jié)。
[0170]步驟211:判斷填充字是否為合法,是則執(zhí)行步驟212 ;否則判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送第二錯誤響應(yīng),返回步驟201 ;如果是USB模式,則通過USB端口向上位機發(fā)送第二錯誤響應(yīng),返回步驟201 ;
[0171]本實施例中,根據(jù)填充字的取值判斷填充字是否合法,具體為,如果填充字的取值等于第六預(yù)設(shè)值,則表示填充字合法;否則表示填充字不合法;其中,第六預(yù)設(shè)值為OxFFFF ;
[0172]步驟212:對第二命令的明文的指定部分進行計算得到校驗結(jié)果;
[0173]本實施例中,第二命令的明文的指定部分具體為,第二命令的明文中除校驗碼以外的部分,即第二命令的明文的KSN明文、IPEK明文和填充字部分;
[0174]具體地,讀卡器對從第二命令的明文的第一預(yù)設(shè)字節(jié)開始獲取第三預(yù)設(shè)長度的數(shù)據(jù),對獲取到的數(shù)據(jù)進行計算,得到的計算結(jié)果為校驗結(jié)果。其中,第三預(yù)設(shè)長度為28個字節(jié)。
[0175]步驟213:從第二命令的明文中獲取校驗碼,判斷校驗結(jié)果與校驗碼是否相同,是則執(zhí)行步驟214 ;否則判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送第三錯誤響應(yīng),返回步驟201 ;如果是USB模式,則通過USB端口向上位機發(fā)送第三錯誤響應(yīng),返回步驟201 ;
[0176]本實施例中,從第二命令的明文的第四預(yù)設(shè)字節(jié)開始獲取第四預(yù)設(shè)長度的數(shù)據(jù),將其作為校驗碼;其中,第四預(yù)設(shè)字節(jié)為第二命令的明文的第二十九字節(jié),第四預(yù)設(shè)長度為4個字節(jié)。
[0177]步驟214:從第二命令的明文中獲取KSN明文和IPEK明文,用KSN明文和IPEK明文分別替換flash中的KSN和IPEK,執(zhí)行步驟215 ;
[0178]具體地,從第二命令的明文的第一預(yù)設(shè)字節(jié)開始獲取第五預(yù)設(shè)長度的數(shù)據(jù),將其作為IPEK,從第二命令的明文的第五預(yù)設(shè)字節(jié)開始獲取第六預(yù)設(shè)長度的數(shù)據(jù),將其作為KSN0其中,第五預(yù)設(shè)字節(jié)為第二命令的明文的第十七字節(jié),第五預(yù)設(shè)長度為16個字節(jié),第六預(yù)設(shè)長度為10個字節(jié)。
[0179]步驟215:判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送寫A KSN和IPEK響應(yīng),返回步驟201 ;如果是USB模式,則通過USB端口向上位機發(fā)送寫入KSN和IPEK響應(yīng),返回步驟201 ;
[0180]當讀卡器接收到第三命令時,執(zhí)行步驟216至步驟217,實現(xiàn)將讀卡器內(nèi)部的KSN返回給上位機;
[0181]步驟216:從 flash 中獲取 KSN ;
[0182]步驟217:向上位機發(fā)送KSN響應(yīng),返回步驟201 ;
[0183]本實施例中,KSN響應(yīng)包括KSN和獲取KSN狀態(tài)字。獲取KSN狀態(tài)字為0x9000時,表示獲取KSN成功,獲取KSN狀態(tài)字為其他值時,表示獲取KSN失敗。
[0184]當讀卡器接收到的命令的第一個字節(jié)的取值為第二預(yù)設(shè)值時,執(zhí)行步驟218至步驟229,實現(xiàn)讀卡器解密上位機下發(fā)的命令,將解密后的命令發(fā)送給卡片;讀卡器將卡片返回數(shù)據(jù)進行加密,將加密后的卡片返回數(shù)據(jù)發(fā)送給上位機;
[0185]步驟218:判斷接收到的命令的指令字是否為預(yù)設(shè)值,是則執(zhí)行步驟219 ;否則執(zhí)行步驟220 ;
[0186]步驟219:讀卡器將接收到的命令發(fā)送給卡片,等待接收卡片返回的數(shù)據(jù),執(zhí)行步驟 225 ;
[0187]步驟220:獲取flash中的IPEK和KSN,根據(jù)IPEK和KSN計算解密密鑰,執(zhí)行步驟221 ;
[0188]步驟221:根據(jù)算法標識對應(yīng)的算法和解密密鑰對接收到的命令進行解密,得到解密后的命令;
[0189]步驟222:判斷解密后的命令的指令字是否為預(yù)設(shè)值,是則執(zhí)行步驟224 ;否則執(zhí)行步驟223 ;
[0190]步驟223:判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送接收到的數(shù)據(jù)不支持此操作的響應(yīng),返回步驟201 ;如果是USB模式,則通過USB端口向上位機發(fā)送接收到的數(shù)據(jù)不支持此操作的響應(yīng),返回步驟201 ;
[0191]步驟224:將解密標識置位,將解密后的數(shù)據(jù)發(fā)送給卡片,等待接收卡片返回的數(shù)據(jù),執(zhí)行步驟225 ;
[0192]步驟225:當接收到卡片返回的數(shù)據(jù)時,判斷解密標識是否置位,是則執(zhí)行步驟227;否則執(zhí)行步驟226 ;
[0193]步驟226:判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送卡片返回的數(shù)據(jù),返回步驟201 ;如果是USB模式則通過USB端口向上位機發(fā)送卡片返回的數(shù)據(jù),返回步驟201 ;
[0194]步驟227:將解密標識復(fù)位,獲取flash中的IPEK和KSN,按照預(yù)設(shè)方式更新KSN,并將更新后的KSN替換flash中的KSN,根據(jù)IPEK和更新后的KSN計算加密密鑰,執(zhí)行步驟
228;
[0195]步驟228:根據(jù)加密密鑰和算法標識對應(yīng)的算法對卡片返回的數(shù)據(jù)進行加密,得到加密結(jié)果;
[0196]步驟229:判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送加密結(jié)果,返回步驟201 ;如果是USB模式,則通過USB端口向上位機發(fā)送加密結(jié)果,返回步驟201。
[0197]實施例3
[0198]本實施例中,處理USB數(shù)據(jù)的方法和處理蘋果數(shù)據(jù)的方法相同,如圖4-1和圖4-2所示,具體包括,
[0199]步驟301:讀卡器上電,進行初始化;
[0200]本實施例中,讀卡器中設(shè)置有解密標識、算法標識。其中,解密標識為復(fù)位或置位,解密標識復(fù)位表示失能解密,解密標識置位表示使能解密;算法標識包括第一算法標識和第二算法標識,優(yōu)選的,第一算法標識對應(yīng)3DES算法,第二算法標識對應(yīng)AES算法;
[0201]優(yōu)選的,讀卡器上電,進行初始化時將解密標識復(fù)位,將算法標識置為第一算法標識。
[0202]讀卡器上電進行初始化時還包括,
[0203]打開中斷,中斷包括蘋果端口接收數(shù)據(jù)中斷和USB接收數(shù)據(jù)中斷;打開中斷用于當讀卡器通過蘋果端口接收到數(shù)據(jù)時,進入蘋果端口接收數(shù)據(jù)中斷處理;用于當讀卡器通過USB端口接收到數(shù)據(jù)時,進入USB接收數(shù)據(jù)中斷處理;
[0204]蘋果端口接收數(shù)據(jù)中斷的處理方法如圖5所示,包括,
[0205]步驟Al:進入蘋果端口接收數(shù)據(jù)中斷;
[0206]步驟A2:判斷蘋果端口接收中斷標識是否置位,是則執(zhí)行步驟A3 ;否則執(zhí)行步驟A5 ;
[0207]步驟A3:清除中斷標識,判斷接收數(shù)據(jù)是否完成,是則執(zhí)行步驟A4 ;否則執(zhí)行步驟A5 ;
[0208]步驟A4:將蘋果端口接收數(shù)據(jù)完成標識置位;
[0209]步驟A5:退出蘋果端口接收數(shù)據(jù)中斷;
[0210]USB接收數(shù)據(jù)中斷的處理方法如圖6所示,包括,
[0211]步驟B1:進入USB接收數(shù)據(jù)中斷;
[0212]步驟B2:判斷USB接收數(shù)據(jù)中斷標識是否置位,是則執(zhí)行步驟B3 ;否則執(zhí)行步驟B5 ;
[0213]步驟B3:清除中斷標識,判斷接收數(shù)據(jù)是否完成,是則執(zhí)行步驟B4 ;否則執(zhí)行步驟B5 ;[0214]步驟B4:將USB接收數(shù)據(jù)完成標識置位;
[0215]步驟B5:退出USB接收數(shù)據(jù)中斷。
[0216]步驟302:判斷蘋果端口接收數(shù)據(jù)完成標識是否置位,是則執(zhí)行步驟303 ;否則執(zhí)行步驟304 ;
[0217]步驟303:將蘋果端口接收數(shù)據(jù)完成標識復(fù)位,將蘋果端口發(fā)送數(shù)據(jù)標識置位,執(zhí)行步驟306 ;
[0218]步驟304:判斷USB接收數(shù)據(jù)完成標識是否置位,是則執(zhí)行步驟305 ;否則返回步驟 302 ;
[0219]步驟305:將USB接收數(shù)據(jù)完成標識復(fù)位,將USB發(fā)送數(shù)據(jù)標識置位,執(zhí)行步驟306 ;
[0220]步驟306:判斷接收到的命令的第一預(yù)設(shè)字節(jié)的取值,如果是第一預(yù)設(shè)值,則執(zhí)行步驟307 ;如果是第二預(yù)設(shè)值則執(zhí)行步驟331 ;如果是其他值,則執(zhí)行相應(yīng)操作,返回步驟302 ;
[0221]步驟307:根據(jù)命令的第二預(yù)設(shè)字節(jié)的取值判斷命令類型,如果是第一命令,則執(zhí)行步驟308 ;如果是第二命令,則執(zhí)行步驟311 ;如果是第三命令,則執(zhí)行步驟328 ;
[0222]本實施例中,如果命令的第二預(yù)設(shè)字節(jié)的取值等于第三預(yù)設(shè)值,則為第一命令;
[0223]如果命令的第二預(yù)設(shè)字節(jié)的取值等于第四預(yù)設(shè)值,則為第二命令;
[0224]其中,第二命令中包含命令頭和密文部分,密文部分由KSN (Key Serial Number,密鑰序列號)、IPEK (Initial Pin Encryption,初始加密密鑰)、填充字和校驗碼組成;
[0225]如果命令的第二預(yù)設(shè)字節(jié)的取值等于第五預(yù)設(shè)值,則為第三命令;
[0226]優(yōu)選的,第二預(yù)設(shè)字節(jié)為命令的第十一至第十二字節(jié),第三預(yù)設(shè)值為0x5B01,第四預(yù)設(shè)值為0x5B02,第五預(yù)設(shè)值為0x5B03。
[0227]當讀卡器接收到第一命令時,執(zhí)行步驟308至步驟310,實現(xiàn)讀卡器設(shè)置其內(nèi)部的解密標識、算法標識;
[0228]步驟308:設(shè)置解密標識、算法標識;
[0229]本實施例中,根據(jù)第一命令將解密標識置位,將算法標識置為第一算法標識或者第二算法標識。
[0230]步驟309:判斷蘋果端口發(fā)送數(shù)據(jù)標識是否置位,是則通過蘋果端口向上位機發(fā)送解密初始化完成響應(yīng),返回步驟304 ;否則執(zhí)行步驟310 ;
[0231]本實施例中,解密初始化完成響應(yīng)中包括解密初始化狀態(tài)字,當解密初始化狀態(tài)字為0x9000時,表示設(shè)置解密標識、算法標識成功,當解密初始化狀態(tài)字為其他值時,表示設(shè)置解密標識、算法標識失敗。
[0232]步驟310:判斷USB發(fā)送數(shù)據(jù)標識是否置位,是則通過USB端口向上位機發(fā)送解密初始化完成響應(yīng),返回步驟302 ;否則返回步驟302 ;
[0233]當讀卡器接收到第二命令時,執(zhí)行步驟311至步驟327,實現(xiàn)讀卡器設(shè)置其內(nèi)部的KSN 和 IPEK ;
[0234]步驟311:判斷flash中IPEK的長度是否為0,是則執(zhí)行步驟312 ;否則執(zhí)行步驟313 ;
[0235]步驟312:將默認的IPEK作為當前密鑰,采用與算法標識對應(yīng)的算法和當前密鑰對第二命令中的密文部分進行解密,得到第二命令的明文,執(zhí)行步驟314 ;
[0236]本實施例中,默認的IPEK的長度為16字節(jié);
[0237]步驟313:獲取flash中的IPEK并將其作為當前密鑰,采用與算法標識對應(yīng)的算法和當前密鑰對第二命令中的密文部分進行解密,得到第二命令的明文,執(zhí)行步驟314 ;
[0238]優(yōu)選的,第二命令的明文包括IPEK、KSN、填充字、校驗碼,其中IPEK的長度為16個字節(jié),KSN的長度為10個字節(jié),填充字的長度為2個字節(jié),校驗碼的長度為4個字節(jié);
[0239]步驟314:判斷第二命令中的明文的長度是否等于第一預(yù)設(shè)長度,是則執(zhí)行步驟317 ;否則執(zhí)行步驟315 ;
[0240]步驟315:判斷蘋果端口發(fā)送數(shù)據(jù)標識是否置位,是則通過蘋果端口向上位機發(fā)送第一錯誤響應(yīng),返回步驟304 ;否則執(zhí)行步驟316 ;
[0241]本實施例中,第一預(yù)設(shè)長度為32個字節(jié),第一錯誤響應(yīng)為0X6700 ;
[0242]步驟316:判斷USB發(fā)送數(shù)據(jù)標識是否置位,是則通過USB端口向上位機發(fā)送第一錯誤響應(yīng),返回步驟302 ;否則返回步驟302 ;
[0243]步驟317:從第二命令的明文中獲取填充字,執(zhí)行步驟318 ;
[0244]本實施例中,從第二命令的明文的第三預(yù)設(shè)字節(jié)開始獲取第二預(yù)設(shè)長度的數(shù)據(jù),將其作為填充字;
[0245]其中,第三預(yù)設(shè)字節(jié)為第二命令的明文的第二十七字節(jié),第二預(yù)設(shè)長度為2個字節(jié)。
[0246]步驟318:判斷填充字是否為合法,是則執(zhí)行步驟321 ;否則執(zhí)行步驟319 ;
[0247]步驟319:判斷蘋果端口發(fā)送數(shù)據(jù)標識是否置位,是則通過蘋果端口向上位機發(fā)送第二錯誤響應(yīng),返回步驟304 ;否則執(zhí)行步驟320 ;
[0248]本實施例中,根據(jù)填充字的取值判斷填充字是否合法,具體為,如果填充字的取值等于第六預(yù)設(shè)值,則表示填充字合法;否則表示填充字不合法;其中,第六預(yù)設(shè)值為OxFFFF ;
[0249]步驟320:判斷USB發(fā)送數(shù)據(jù)標識是否置位,是則通過USB端口向上位機發(fā)送第二錯誤響應(yīng),返回步驟302 ;否則返回步驟302 ;
[0250]步驟321:對第二命令的明文的指定部分進行計算得到校驗結(jié)果,執(zhí)行步驟322 ;[0251 ] 本實施例中,第二命令的明文的指定部分具體為,第二命令的明文中除校驗碼以外的部分,即第二命令的明文的KSN明文、IPEK明文和填充字部分;
[0252]具體地,讀卡器對從第二命令的明文的第一預(yù)設(shè)字節(jié)開始獲取第三預(yù)設(shè)長度的數(shù)據(jù),對獲取到的數(shù)據(jù)進行計算,得到的計算結(jié)果為校驗結(jié)果。其中,第三預(yù)設(shè)長度為28個字節(jié)。
[0253]步驟322:從第二命令的明文中獲取校驗碼,判斷校驗結(jié)果與校驗碼是否相同,是則執(zhí)行步驟325 ;否則執(zhí)行步驟323 ;
[0254]本實施例中,從第二命令的明文的第四預(yù)設(shè)字節(jié)開始獲取第四預(yù)設(shè)長度的數(shù)據(jù),將其作為校驗碼;其中,第四預(yù)設(shè)字節(jié)為第二命令的明文的第二十九字節(jié),第四預(yù)設(shè)長度為4個字節(jié)。
[0255]步驟323:判斷蘋果端口發(fā)送數(shù)據(jù)標識是否置位,是則通過蘋果端口向上位機發(fā)送第三錯誤響應(yīng),返回步驟304 ;否則執(zhí)行步驟324 ;[0256]步驟324:判斷USB發(fā)送數(shù)據(jù)標識是否置位,是則通過USB端口向上位機發(fā)送第三錯誤響應(yīng),返回步驟302 ;否則返回步驟302 ;
[0257]步驟325:從第二命令的明文中獲取KSN明文和IPEK明文,用KSN明文和IPEK明文分別替換flash中的KSN和IPEK,執(zhí)行步驟326 ;
[0258]具體地,從第二命令的明文的第一預(yù)設(shè)字節(jié)開始獲取第五預(yù)設(shè)長度的數(shù)據(jù),將其作為IPEK,從第二命令的明文的第五預(yù)設(shè)字節(jié)開始獲取第六預(yù)設(shè)長度的數(shù)據(jù),將其作為KSN0其中,第五預(yù)設(shè)字節(jié)為第二命令的明文的第十七字節(jié),第五預(yù)設(shè)長度為16個字節(jié),第六預(yù)設(shè)長度為10個字節(jié)。
[0259]步驟326:判斷蘋果端口發(fā)送數(shù)據(jù)標識是否置位,是則通過蘋果端口向上位機發(fā)送寫入KSN和IPEK響應(yīng),返回步驟304 ;否則執(zhí)行步驟327 ;
[0260]步驟327:判斷USB發(fā)送數(shù)據(jù)標識是否置位,是則通過USB端口向上位機發(fā)送寫入KSN和IPEK響應(yīng),返回步驟302 ;否則返回步驟302 ;
[0261]當讀卡器接收到第三命令時,執(zhí)行步驟328至步驟330,實現(xiàn)將讀卡器內(nèi)部的KSN返回給上位機;
[0262]步驟328:從 flash 中獲取 KSN ;
[0263]步驟329:判斷蘋果端口發(fā)送數(shù)據(jù)標識是否置位,是則通過蘋果端口向上位機發(fā)送KSN響應(yīng),返回步驟304 ;否則執(zhí)行步驟330 ;
[0264]本實施例中,KSN響應(yīng)包括KSN和獲取KSN狀態(tài)字。獲取KSN狀態(tài)字為0x9000時,表示獲取KSN成功,獲取KSN狀態(tài)字為其他值時,表示獲取KSN失敗。
[0265]步驟330:判斷USB發(fā)送數(shù)據(jù)標識是否置位,是則通過USB端口向上位機發(fā)送KSN響應(yīng),返回步驟302 ;否則返回步驟302 ;
[0266]當讀卡器接收到的命令的第一個字節(jié)的取值為第二預(yù)設(shè)值時,執(zhí)行步驟331至步驟344,實現(xiàn)讀卡器解密上位機下發(fā)的命令,將解密后的命令發(fā)送給卡片;讀卡器將卡片返回數(shù)據(jù)進行加密,將加密后的卡片返回數(shù)據(jù)發(fā)送給上位機;
[0267]步驟331:判斷接收到的命令的指令字是否為預(yù)設(shè)值,是則將接收到的命令發(fā)送給卡片,等待接收卡片返回的數(shù)據(jù),執(zhí)行步驟338 ;否則執(zhí)行步驟332 ;
[0268]步驟332:獲取flash中的IPEK和KSN,根據(jù)IPEK和KSN計算解密密鑰,執(zhí)行步驟333 ;
[0269]步驟333:根據(jù)解密密鑰和預(yù)設(shè)解密算法對接收到的命令進行解密,得到解密后的命令;
[0270]步驟334:判斷解密后的命令的指令字是否為預(yù)設(shè)值,是則執(zhí)行步驟337 ;否則執(zhí)行步驟335 ;
[0271]步驟335:判斷蘋果端口發(fā)送數(shù)據(jù)標識是否置位,是則通過蘋果端口向上位機發(fā)送接收到的數(shù)據(jù)不支持此操作的響應(yīng),將蘋果端口發(fā)送數(shù)據(jù)標識復(fù)位,返回步驟304 ;否則執(zhí)行步驟336 ;
[0272]步驟336:判斷USB發(fā)送數(shù)據(jù)標識是否置位,是則通過USB端口向上位機發(fā)送接收到的數(shù)據(jù)不支持此操作的響應(yīng),將USB發(fā)送數(shù)據(jù)標識復(fù)位,返回步驟302 ;否則返回步驟302 ;
[0273]步驟337:將解密標識置位,將解密后的數(shù)據(jù)發(fā)送給卡片,等待接收卡片返回的數(shù)據(jù),執(zhí)行步驟338 ;
[0274]步驟338:當接收到卡片返回的數(shù)據(jù)時,判斷解密標識是否置位,是則執(zhí)行步驟
341;否則執(zhí)行步驟339 ;
[0275]步驟339:判斷蘋果端口發(fā)送數(shù)據(jù)標識是否置位,是則通過蘋果端口向上位機發(fā)送卡片返回的數(shù)據(jù),將蘋果端口發(fā)送數(shù)據(jù)標識復(fù)位,返回步驟304 ;否則執(zhí)行步驟340 ;
[0276]步驟340:判斷USB發(fā)送數(shù)據(jù)標識是否置位,是則通過USB端口向上位機發(fā)送卡片返回的數(shù)據(jù),將USB發(fā)送數(shù)據(jù)標識復(fù)位,返回步驟302 ;否則返回步驟302 ;
[0277]步驟341:將解密標識復(fù)位,獲取flash中的IPEK和KSN,按照預(yù)設(shè)方式更新KSN,并將更新后的KSN替換flash中的KSN,根據(jù)IPEK和更新后的KSN計算加密密鑰,執(zhí)行步驟
342;
[0278]步驟342:根據(jù)加密密鑰和算法標識對應(yīng)的算法對卡片返回的數(shù)據(jù)進行加密,得到加密結(jié)果,執(zhí)行步驟343;
[0279]步驟343:判斷蘋果端口發(fā)送數(shù)據(jù)標識是否置位,是則通過蘋果端口向上位機發(fā)送加密結(jié)果,將蘋果端口發(fā)送數(shù)據(jù)標識復(fù)位,返回步驟304 ;否則執(zhí)行步驟344 ;
[0280]步驟344:判斷USB發(fā)送數(shù)據(jù)標識是否置位,是則通過USB向上位機發(fā)送加密結(jié)果,將USB發(fā)送數(shù)據(jù)標識復(fù)位,返回步驟302 ;否則返回步驟302。
[0281]需要說明的是,實施例2中步驟218-230還可以為步驟405至步驟415 ;
[0282]步驟405:判斷接收到的命令的指令字是否為預(yù)設(shè)值,是則將命令發(fā)送給卡片,執(zhí)行步驟410 ;否則執(zhí)行步驟406 ;
[0283]步驟406:根據(jù)解密密鑰和預(yù)設(shè)解密算法對接收到的命令進行解密,得到解密后的命令,執(zhí)行步驟407 ;
[0284]步驟407:判斷解密后的命令的指令字是否為預(yù)設(shè)值,是則執(zhí)行步驟409 ;否則執(zhí)行步驟408 ;
[0285]步驟408:判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送接收到的數(shù)據(jù)不支持此操作的響應(yīng),返回步驟201 ;如果是USB模式,則通過USB端口向上位機發(fā)送接收到的數(shù)據(jù)不支持此操作的響應(yīng),返回步驟201 ;
[0286]步驟409:將加密標識置位,將解密后的命令發(fā)送給卡片,執(zhí)行步驟410 ;
[0287]步驟410:等待接收卡片返回的數(shù)據(jù);
[0288]步驟411:當讀卡器接收到卡片返回的數(shù)據(jù)時,判斷加密標識是否置位,是則執(zhí)行步驟413 ;否則執(zhí)行步驟412 ;
[0289]步驟412:判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送卡片返回的數(shù)據(jù),返回步驟201 ;如果是USB模式,則通過USB端口向上位機發(fā)送卡片返回的數(shù)據(jù),返回步驟201 ;
[0290]步驟413:將加密標識復(fù)位,獲取flash中的IPEK和KSN,按照預(yù)設(shè)方式更新KSN,并將更新后的KSN替換flash中的KSN,根據(jù)IPEK和更新后的KSN計算加密密鑰;
[0291]步驟414:根據(jù)加密密鑰和預(yù)設(shè)算法對卡片返回的數(shù)據(jù)進行加密,得到解密結(jié)果,執(zhí)行步驟415 ;
[0292]步驟415:判斷系統(tǒng)工作模式,如果是蘋果模式,則通過蘋果端口向上位機發(fā)送加密結(jié)果,返回步驟201 ;如果是USB模式,則通過USB端口向上位機發(fā)送加密結(jié)果,返回步驟201。
[0293]上述實施方式同樣可以實現(xiàn)本發(fā)明的發(fā)明目的。
[0294]以上所述,僅為本發(fā)明的【具體實施方式】,但本發(fā)明的保護范圍并不局限于此,任何熟悉本【技術(shù)領(lǐng)域】的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范 圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)所述以權(quán)利要求的保護范圍為準。
【權(quán)利要求】
1.一種安全通訊的方法,其特征在于,包括, 步驟S1:讀卡器上電,進行初始化;所述初始化包括將解密標識置位,初始化算法標識,將解密方式置為雙向解密; 步驟S2:判斷系統(tǒng)工作模式,如果是蘋果模式則執(zhí)行步驟S3 ;如果是USB模式則執(zhí)行步驟S4 ; 步驟S3:進入蘋果設(shè)備認證流程,判斷是否認證成功,是則執(zhí)行步驟S4 ;否則返回步驟S2 ; 步驟S4:所述讀卡器等待接收命令,當接收到命令時,判斷所述命令的第一預(yù)設(shè)字節(jié),如果是第一預(yù)設(shè)值則執(zhí)行步驟S5 ;如果是第二預(yù)設(shè)值則執(zhí)行步驟S6 ;如果是其他值,則執(zhí)行相應(yīng)操作,返回步驟S4; 步驟S5:根據(jù)所述命令的第二預(yù)設(shè)字節(jié)判斷命令類型,如果是第一命令,則根據(jù)所述第一命令設(shè)置所述解密標識、所述算法標識、所述解密方式,根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送第一響應(yīng),返回步驟S4;如果是第二命令,根據(jù)所述第二命令更新讀卡器中的初始加密密鑰和密鑰序列號,根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送第二響應(yīng),返回步驟S4 ;如果是第三命令則從所述讀卡器中獲取密鑰序列號,根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送第三響應(yīng),返回步驟S4 ; 步驟S6:判斷所述解密標識是否置位,是則執(zhí)行步驟S7 ;否則將所述接收到的命令發(fā)送給卡片,等待接收所述卡片返回的數(shù)據(jù),當所述讀卡器接收到所述卡片返回的數(shù)據(jù)時,根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送所述卡片返回的數(shù)據(jù),返回步驟S4 ; 步驟S7:判斷所述解密方式,如果是雙向解密則從所述讀卡器中獲取初始加密密鑰和所述密鑰序列號,根據(jù)所述初始加密密鑰和所述密鑰序列號計算解密密鑰,根據(jù)所述算法標識對應(yīng)的算法和所述解密密鑰對所述接收到的命令中的密文進行解密,得到解密后的命令,將所述解密后的命令發(fā)送給卡片,等待接收所述卡片返回的數(shù)據(jù),執(zhí)行步驟S8;如果是單向解密則將所述接收到的命令發(fā)送給卡片,等待接收所述卡片返回的數(shù)據(jù),執(zhí)行步驟S8 ; 步驟S8:當所述讀卡器接收到所述卡片返回的數(shù)據(jù)時,按照預(yù)設(shè)方式更新所述密鑰序列號,采用與所述算法標識對應(yīng)的算法、所述初始加密密鑰和所述密鑰序列號對所述卡片返回的數(shù)據(jù)進行加密,得到卡片返回數(shù)據(jù)的密文,根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送所述卡片返回數(shù)據(jù)的密文,返回步驟S4。
2.如權(quán)利要求1所述的方法,其特征在于,所述步驟S5中所述根據(jù)所述第二命令更新讀卡器中的初始加密密鑰和密鑰序列號,具體為, 所述讀卡器獲取初始加密密鑰,并將其作為當前密鑰,采用所述算法標識對應(yīng)的算法和所述當前密鑰對所述第二命令中的密文部分進行解密,得到第二命令的明文,驗證所述第二命令的明文是否合法,是則根據(jù)所述第二命令的明文更新所述讀卡器中的所述初始加密密鑰和所述密鑰序列號;否則根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機報錯,返回步驟S4。
3.如權(quán)利要求2所述的方法,其特征在于,所述讀卡器獲取初始加密密鑰,并將其作為當前密鑰,具體為, 判斷所述讀卡器中的是否存在初始加密密鑰,是則從所述讀卡器中獲取初始加密密鑰,并將其作為當前加密密鑰;否則將默認的初始加密密鑰作為當前加密密鑰。
4.如權(quán)利要求2所述的方法,其特征在于,所述驗證所述第二命令的明文是否合法,具體包括, 驗證所述第二命令的明文的長度是否合法,驗證所述第二命令的明文的填充字是否合法,驗證所述第二命令的明文中的校驗碼是否合法; 如果所述第二命令的明文的長度合法、所述填充字合法,并且所述校驗碼合法,則所述第二命令的明文合法;否則所述第二命令的明文不合法。
5.如權(quán)利要求4所述的方法,其特征在于,所述驗證所述第二命令的明文的長度是否合法具體為,判斷所述第二命令的明文的長度是否等于第一預(yù)設(shè)長度,是則所述第二明文的長度合法;否則根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送第一錯誤響應(yīng),返回步驟S4 ; 所述驗證所述第二命令的明文的填充字是否合法具體為,所述讀卡器從所述第二命令的明文中獲取填充字,判斷所述填充字是否與第六預(yù)設(shè)值匹配,是則所述填充字合法;否則根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送第二錯誤響應(yīng),返回步驟S4 ; 所述驗證所述第二命令的明文中的校驗碼是否合法具體為,所述讀卡器對所述第二命令的明文中的指定部分進行計算,得到校驗結(jié)果,從所述第二命令的明文中獲取校驗碼,判斷所述校驗碼與所述校驗結(jié)果是否相同,是則所述第二命令的明文中的校驗碼合法;否則根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送第三錯誤響應(yīng),返回步驟S4。
6.如權(quán)利要求1所述的方法,其特征在于,所述密鑰序列號中包括密鑰序列號的計數(shù)值; 所述按照預(yù)設(shè)方式更新所述密鑰序列號,具體為,更新所述密鑰序列號的計數(shù)值。
7.如權(quán)利要求1所述的方法,其特征在于,所述步驟S8中,所述采用與所述算法標識對應(yīng)的算法、所述初始加密密鑰和所述密鑰序列號對所述卡片返回的數(shù)據(jù)進行加密,具體為, 步驟Fl:所述讀卡器將所述卡片返回的數(shù)據(jù)轉(zhuǎn)碼成美國標準信息交換碼數(shù)據(jù),獲取所述美國標準信息交換碼數(shù)據(jù)刪除最后一個字節(jié)得到的數(shù)據(jù)的長度,將其作為第一長度; 步驟F2:用第一數(shù)據(jù)對所述第一長度做模運算,得到的計算結(jié)果作為第二長度; 步驟F3:從所述美國標準信息交換碼數(shù)據(jù)刪除最后一個字節(jié)得到的數(shù)據(jù)的低位端開始用第二長度的第二數(shù)據(jù)補位,得到補位后的數(shù)據(jù),采用與所述算法標識對應(yīng)的算法、所述初始加密密鑰和所述密鑰序列號對所述補位后的數(shù)據(jù)進行加密。
8.如權(quán)利要求1所述的方法,其特征在于,所述步驟SI中,所述初始化具體為:初始化算法標識,將解密標識置位; 所述步驟S5中所述如果是第一命令,則根據(jù)所述第一命令設(shè)置所述解密標識、所述算法標識、所述解密方式,具體為,如果是第一命令,則根據(jù)所述第一命令設(shè)置所述解密標識,所述算法標識; 所述步驟S6至步驟S8替換為步驟S6,至步驟S8,, 步驟S6’:判斷接收到的命令的指令字是否為預(yù)設(shè)值,是則將所述接收到命令發(fā)送給所述卡片,等待接收所述卡片返回的數(shù)據(jù),執(zhí)行步驟S8’ ;否則從所述讀卡器中獲取所述初始加密密鑰和所述密鑰序列號,根據(jù)所述初始加密密鑰和所述密鑰序列號計算解密密鑰,采用所述算法標識對應(yīng)的算法和所述解密密鑰對所述接收到的命令進行解密,得到解密結(jié)果,執(zhí)行步驟S7’ ; 步驟S7’:判斷所述解密結(jié)果的指令字是否為預(yù)設(shè)值,是則將所述解密標識置位,將所述解密結(jié)果發(fā)送給所述卡片,等待接收所述卡片返回的數(shù)據(jù),執(zhí)行步驟S8’ ;否則根據(jù)所述系統(tǒng)工作模式采用相應(yīng)的端口向上位機發(fā)送接收到的數(shù)據(jù)不支持此操作的響應(yīng),返回步驟S2 ; 步驟S8,:當所述讀卡器接收到所述卡片返回的數(shù)據(jù)時,判斷所述解密標識是否置位,是則將所述解密標識復(fù)位,從所述讀卡器中獲取所述初始加密密鑰和所述密鑰序列號,按照預(yù)設(shè)方式更新所述密鑰序列號,根據(jù)所述初始加密密鑰和所述密鑰序列號計算加密密鑰,將所述密鑰序列號作為所述讀卡器中更新后的所述密鑰序列號,根據(jù)所述加密密鑰和所述算法標識對應(yīng)的算法對所述卡片返回的數(shù)據(jù)進行加密,得到加密結(jié)果,根據(jù)所述系統(tǒng)工作模式采用相應(yīng)的端口向上位機發(fā)送所述加密結(jié)果,返回步驟S2。
9.如權(quán)利要求1所述的方法,其特征在于,所述步驟SI中所述初始化,還包括,打開中斷,所述中斷包括,蘋果端口接收數(shù)據(jù)中斷和USB端口接收數(shù)據(jù)中斷; 當所述讀卡器通過蘋果端口接收到數(shù)據(jù)時,進入蘋果端口接收數(shù)據(jù)中斷;所述蘋果端口接收數(shù)據(jù)中斷,具體包括, 步驟Gl:判斷蘋果端口接收中斷標識是否置位,是則執(zhí)行步驟G2 ;否則退出蘋果端口接收數(shù)據(jù)中斷; 步驟G2:清除中斷標識,判斷接收數(shù)據(jù)是否完成,是則將蘋果端口接收數(shù)據(jù)完成標識置位,退出蘋果端口接收數(shù)據(jù)中斷;否則退出蘋果端口接收數(shù)據(jù)中斷; 當所述讀卡器通過USB端口接收到數(shù)據(jù)時,進入USB接收數(shù)據(jù)中斷;所述USB接收數(shù)據(jù)中斷具體包括, 步驟Hl:判斷USB接收數(shù)據(jù)中斷標識是否置位,是則執(zhí)行步驟H2 ;否則退出USB接收數(shù)據(jù)中斷; 步驟H2:清除中斷標識,判斷接收數(shù)據(jù)是否完成,是則將USB接收數(shù)據(jù)完成標識置位,退出USB接收數(shù)據(jù)中斷;否則退出USB接收數(shù)據(jù)中斷; 所述步驟S2至步驟S4替換為步驟S2’至步驟S4’: 步驟S2’:所述讀卡器判斷蘋果端口接收數(shù)據(jù)完成標識是否置位,是則將所述蘋果端口接收數(shù)據(jù)完成標識復(fù)位,將蘋果端口發(fā)送數(shù)據(jù)標識置位,執(zhí)行步驟S4’ ;否則執(zhí)行步驟S3’ ;步驟S3’:判斷USB接收數(shù)據(jù)完成標識是否置位,是則將所述USB接收數(shù)據(jù)完成標識復(fù)位,將USB發(fā)送數(shù)據(jù)標識置位,執(zhí)行步驟S4’ ;否則返回步驟S2’ ; 步驟S4,:判斷接收到的命令的第一預(yù)設(shè)字節(jié),如果是第一預(yù)設(shè)值則執(zhí)行步驟S5 ;如果是第二預(yù)設(shè)值則執(zhí)行步驟S6’ ;如果是其他值,則執(zhí)行相應(yīng)操作,返回步驟S2’ ; 所述步驟S7’中,所述根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送接收到的數(shù)據(jù)不支持此操作的響應(yīng),返回步驟S2,替換為步驟S7’ -1至步驟S7’ -2, 步驟S7,-1:判斷所述蘋果端口發(fā)送數(shù)據(jù)標識是否置位,是則將所述蘋果端口發(fā)送數(shù)據(jù)標識復(fù)位,通過所述蘋果端口向上位機發(fā)送接收到的數(shù)據(jù)不支持此操作的響應(yīng),返回步驟S3’ ;否則執(zhí)行步驟S7’ -2; 步驟S7,-2:判斷所述USB發(fā)送數(shù)據(jù)標識是否置位,是則將所述USB發(fā)送數(shù)據(jù)標識復(fù)位,通過所述USB端口向上位機發(fā)送接收到的數(shù)據(jù)不支持此操作的響應(yīng),返回步驟S2’ ;否則返回步驟S2 ; 所述步驟S5中,所述返回步驟S4替換為返回步驟S2’ ; 所述步驟S8’中,所述根據(jù)所述系統(tǒng)工作模式通過相應(yīng)的端口向上位機發(fā)送所述加密結(jié)果,返回步驟S2,替換為步驟S8’ -1至步驟S8’ -2, 步驟S8’ -1:判斷所述蘋果發(fā)送數(shù)據(jù)標識是否置位,是則將所述蘋果發(fā)送數(shù)據(jù)標識復(fù)位,通過所述蘋果端口向上位機發(fā)送所述加密結(jié)果,返回步驟S3’ ;否則執(zhí)行步驟S8’ -2 ;步驟S8’ -2:判斷所述USB發(fā)送數(shù)據(jù)標識是否置位,是則將所述USB發(fā)送數(shù)據(jù)標識復(fù)位,通過所述USB端口向上位機發(fā)送所述加密結(jié)果,返回步驟S2’ ;否則返回步驟S2’。
10.如權(quán)利要求5所述的方法,其特征在于,所述從所述第二命令的明文中獲取填充字,具體為, 從所述第二命令的明文的第三預(yù)設(shè)字節(jié)開始獲取第二預(yù)設(shè)長度的數(shù)據(jù),將其作為填充字。
11.如權(quán)利要求5所述的方法,其特征在于,所述從所述第二命令的明文中獲取校驗碼,具體為, 從所述第二命令的明文的第四預(yù)設(shè)字節(jié) 開始獲取第四預(yù)設(shè)長度的數(shù)據(jù),將其作為校驗碼。
12.如權(quán)利要求5所述的方法,其特征在于,所述第二命令的明文中的指定部分,具體為, 所述從第二命令的明文的第一預(yù)設(shè)字節(jié)開始獲取第三預(yù)設(shè)長度的數(shù)據(jù)。
13.如權(quán)利要求5所述的方法,其特征在于,所述從所述第二命令的明文中獲取初始加密密鑰和密鑰序列號,具體包括, 從所述第二命令的明文的第一預(yù)設(shè)字節(jié)開始獲取第五預(yù)設(shè)長度的數(shù)據(jù),將其作為初始加密密鑰,從所述第二命令的明文的第五預(yù)設(shè)字節(jié)開始獲取第六預(yù)設(shè)長度的數(shù)據(jù),將其作為密鑰序列號。
14.如權(quán)利要求1所述的方法,其特征在于,所述根據(jù)所述系統(tǒng)工作模式采用相應(yīng)的端口,具體為, 判斷所述系統(tǒng)工作模式,如果是蘋果模式,則采用蘋果端口 ;如果是USB模式,則采用USB 端口。
15.如權(quán)利要求1所述的方法,其特征在于,所述步驟S2中所述判斷系統(tǒng)工作模式具體為, 步驟Yl:所述讀卡器判斷是否通過蘋果端口與上位機建立連接,是則系統(tǒng)工作模式為蘋果模式;否則執(zhí)行步驟Y2; 步驟Y2:判斷是否通過USB端口與上位機建立連接,是則所述系統(tǒng)工作模式為USB模式;否則預(yù)設(shè)時間后返回步驟Yl。
16.如權(quán)利要求1所述的方法,其特征在于,所述判斷系統(tǒng)工作模式具體為, 步驟Y1’:所述讀卡器判斷是否通過USB端口與上位機建立連接,是則所述系統(tǒng)工作模式為USB模式,否則執(zhí)行步驟Y2’ ; 步驟Y2’:判斷是否通過蘋果端口與上位機建立連接,是則所述系統(tǒng)工作模式為蘋果模式;否則預(yù)設(shè)時間后返回步驟Y1’。
【文檔編號】H04L9/08GK103647648SQ201310664801
【公開日】2014年3月19日 申請日期:2013年12月10日 優(yōu)先權(quán)日:2013年12月10日
【發(fā)明者】陸舟, 于華章 申請人:飛天誠信科技股份有限公司
網(wǎng)友詢問留言 已有0條留言
  • 還沒有人留言評論。精彩留言會獲得點贊!
1
普安县| 新兴县| 沅江市| 辽阳县| 乌海市| 东丽区| 玛沁县| 汾阳市| 永川市| 延庆县| 禄劝| 观塘区| 大城县| 屏边| 夏河县| 固始县| 东丽区| 怀远县| 文山县| 准格尔旗| 邵东县| 五台县| 玉山县| 福建省| 蓬安县| 永胜县| 石城县| 龙口市| 泗洪县| 四子王旗| 饶河县| 东乡族自治县| 宁国市| 阿鲁科尔沁旗| 梧州市| 林西县| 湟源县| 阳朔县| 桦甸市| 堆龙德庆县| 绥棱县|