專利名稱:一種在嵌入式系統(tǒng)中生成動態(tài)口令的方法及裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及身份認(rèn)證領(lǐng)域,尤其涉及一種在嵌入式系統(tǒng)中生成動態(tài)口令的方法與
裝置。
背景技術(shù):
現(xiàn)有技術(shù)中,動態(tài)口令每生成一次都要求對動態(tài)因子做一次運(yùn)算,而由動態(tài)因子得到動態(tài)口令的運(yùn)算為較復(fù)雜運(yùn)算,倘若需要動態(tài)口令頻繁生成,則其運(yùn)算費(fèi)時且對硬件損耗較大,尤其對于常顯的動態(tài)令牌,每隔固定時間計算一次動態(tài)口令,如何降低動態(tài)口令生成時間及硬件損耗亟待解決的問題。
發(fā)明內(nèi)容
本發(fā)明目的是解決目前現(xiàn)有技術(shù)中動態(tài)口令頻繁生成對硬件損耗較大且耗時較長的問題,根據(jù)本發(fā)明的一方面,提供了一種在嵌入式系統(tǒng)中生成動態(tài)口令的方法,包括步驟SI =CPU檢測到生成動態(tài)口令的預(yù)設(shè)條件;步驟S2 :根據(jù)計時器得到當(dāng)前動態(tài)值;步驟S3 :根據(jù)所述當(dāng)前動態(tài)值和/或第一預(yù)設(shè)值生成尋址指針的值,并根據(jù)所述當(dāng)前動態(tài)值或所述尋址指針的值判斷是否需要生成固定長度的數(shù)據(jù)串,是則執(zhí)行步驟S4,否則執(zhí)行步驟S6 ;步驟S4:生成當(dāng)前動態(tài)因子,調(diào)用預(yù)置在第一存儲器中的靜態(tài)因子,對所述當(dāng)前動態(tài)因子及所述靜態(tài)因子進(jìn)行處理生成固定長度數(shù)據(jù)串,并用所述固定長度數(shù)據(jù)串更新第一緩存區(qū)中的數(shù)據(jù);步驟S5 :根據(jù)所述第一預(yù)設(shè)值對所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行分段;步驟S6 :根據(jù)所述尋址指針的值,在分段的所述第一緩存區(qū)中查找相應(yīng)的數(shù)據(jù)段,并將查找到的數(shù)據(jù)段的值作為動態(tài)口令輸出。其中,所述計時器為定時觸發(fā)器,每隔預(yù)設(shè)時間觸發(fā)一次;所述預(yù)設(shè)條件為所述定時觸發(fā)器觸發(fā)信號。或者,所述計時器設(shè)有最大值及溢標(biāo)志位,所述預(yù)設(shè)條件為所述計時器的溢出標(biāo)志位置位;所述步驟Si中檢測到所述預(yù)設(shè)條件后還包括將所述計時器的溢出標(biāo)志位復(fù)位?;蛘撸鲱A(yù)設(shè)條件為所述計時器計時達(dá)到預(yù)設(shè)時間,所述步驟SI中所述CPU檢測到所述預(yù)設(shè)條件后還包括將所述計時器清零,重新開始計時。進(jìn)一步地,所述步驟S2中所述根據(jù)計時器得到當(dāng)前動態(tài)值具體為所述計時器滿足所述預(yù)設(shè)條件后,計數(shù)器計數(shù)一次,所述CPU獲取所述計數(shù)器的計數(shù)值得到所述當(dāng)前動態(tài)值。其中,所述計數(shù)器為從0到所述第一預(yù)設(shè)值的循環(huán)計數(shù)器,獲取到的所述當(dāng)前動態(tài)值即所述尋址指針的值,所述步驟S3中判斷是否生成固定長度的數(shù)據(jù)串具體為所述CPU判斷所述計數(shù)器的計數(shù)值或所述尋址指針的值是否為O,是則需要生成所述固定長度數(shù)據(jù)串,否則不需要。進(jìn)一步地,當(dāng)所述CPU判斷需要生成固定長度數(shù)據(jù)串時,所述步驟S4中生成所述當(dāng)前動態(tài)因子具體為將第二緩存區(qū)中的數(shù)據(jù)自增一個第二預(yù)設(shè)值得到所述當(dāng)前動態(tài)因子,并用所述當(dāng)前動態(tài)因子更新第二緩存區(qū);所述步驟S5中根據(jù)所述第一預(yù)設(shè)值對所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行分段具體為將所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行等長分段,所分段數(shù)大于或等于所述第一預(yù)設(shè)值加I的值。進(jìn)一步地,所述步驟S3具體為所述CPU用所述當(dāng)前動態(tài)值對所述第一預(yù)設(shè)值進(jìn)行取模運(yùn)算,得到所述尋址指針的值,并賦值給尋址指針;判斷所述尋址指針的值是否為0,是則需要生成固定長度的數(shù)據(jù)串,否則不需要生成固定長度的數(shù)據(jù)串。 進(jìn)一步地,當(dāng)所述CPU判斷需要生產(chǎn)固定長度數(shù)據(jù)串時,所述步驟S4中生成所述當(dāng)前動態(tài)因子具體為獲取當(dāng)前動態(tài)值將其作為當(dāng)前動態(tài)因子;所述步驟S5中根據(jù)所述第一預(yù)設(shè)值對所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行分段具體為將所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行等長分段,所分段數(shù)大于或等于所述第一預(yù)設(shè)值。其中,所述計數(shù)器設(shè)有初始值,所述CPU將計數(shù)器的初始值存儲于第二存儲器,所述步驟S3具體為所述CPU根據(jù)所述第一預(yù)設(shè)值,分別獲取所述當(dāng)前動態(tài)值與所述計數(shù)器初始值的低位端相應(yīng)比特位數(shù)的數(shù)據(jù),用得到的當(dāng)前動態(tài)值的低位端數(shù)據(jù)減所述計數(shù)器初始值的低位端數(shù)據(jù)得到所述尋址指針的值,并將所述尋址指針的值賦值給尋址指針;判斷所述尋址指針的值是否為0,是則需要生成固定長度的數(shù)據(jù)串,否則不需要生成固定長度的數(shù)據(jù)串。進(jìn)一步地,當(dāng)所述CPU判斷需要生產(chǎn)固定長度數(shù)據(jù)串時,所述步驟S4中生成當(dāng)前動態(tài)因子具體為獲取當(dāng)前動態(tài)值并將其作為當(dāng)前動態(tài)因子;步驟S5中根據(jù)所述第一預(yù)設(shè)值對所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行分段具體為所述CPU對所述第一緩存區(qū)的數(shù)據(jù)進(jìn)行等長分段,所分段數(shù)大于或等于第三預(yù)設(shè)值,所述第三預(yù)設(shè)值為以2為底數(shù)、以所述第一預(yù)設(shè)值為冪數(shù)的計算結(jié)果。其中,所述步驟SI具體為所述CPU接收到按鍵觸發(fā)生成動態(tài)口令生成指令。進(jìn)一步地,所述步驟S2中根據(jù)計時器生成所述當(dāng)前動態(tài)值具體為所述CPU獲取計時器所計時間,并根據(jù)預(yù)設(shè)時間對所述當(dāng)前動態(tài)值進(jìn)行處理,得到當(dāng)前動態(tài)值。進(jìn)一步地,所述步驟S3具體包括所述CPU用得到的當(dāng)前動態(tài)值對所述第一預(yù)設(shè)值進(jìn)行取模運(yùn)算,得到尋址指針的值,并賦值給尋址指針;判斷當(dāng)前動態(tài)值與所述尋址指針的值的差值與第二緩存區(qū)中存儲的數(shù)據(jù)是否一致,是則不需要生成固定長度的數(shù)據(jù)串,否則需要生成。進(jìn)一步地,當(dāng)所述CPU判斷需要生成固定長度的數(shù)據(jù)串時,所述步驟S4中的生成當(dāng)前動態(tài)因子具體為用當(dāng)前動態(tài)值減去尋址指針的值得到當(dāng)前動態(tài)因子,所述步驟S4之后還包括所述CPU用所述當(dāng)前動態(tài)因子更新所述第二緩存區(qū)中的數(shù)據(jù);所述步驟S5中根據(jù)所述第一預(yù)設(shè)值對所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行分段具體為將所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行等長分段,所分段數(shù)大于或等于所述第一預(yù)設(shè)值。其中,所述靜態(tài)因子為密鑰,所述步驟S4中對當(dāng)前動態(tài)因子及所述靜態(tài)因子進(jìn)行處理生成固定長度數(shù)據(jù)串具體包括步驟a:所述CPU將當(dāng)前動態(tài)因子及所述靜態(tài)因子組合,根據(jù)組合得到的數(shù)據(jù)的比特位數(shù)對組合得到的數(shù)據(jù)進(jìn)行填充,得到原始數(shù)據(jù),并將所述原始數(shù)據(jù)緩存在第三緩存區(qū);步驟b 對一組字寄存器設(shè)置初始值;步驟c :按照512個比特位對所述第三緩存區(qū)中的數(shù)據(jù)按進(jìn)行分段,并將偏移指針初始位置指向第一段數(shù)據(jù);
步驟d:根據(jù)所述原始數(shù)據(jù)的當(dāng)前段數(shù)據(jù)進(jìn)行消息擴(kuò)展,生成一組字?jǐn)?shù)據(jù);步驟e :所述CPU對所述一組字寄存器中當(dāng)前數(shù)據(jù)及所述一組字?jǐn)?shù)據(jù)進(jìn)行處理,并用處理結(jié)果更新所述一組字寄存器中的數(shù)據(jù);步驟f :判斷所述原始數(shù)據(jù)的當(dāng)前段數(shù)據(jù)是否為最后一段數(shù)據(jù),是則執(zhí)行步驟g,否則將偏移指針右移指向原始數(shù)據(jù)的下一段數(shù)據(jù),返回步驟d ;步驟g :獲取所述一組字寄存器存儲的數(shù)據(jù),得到所述固定長度數(shù)據(jù)串。
其中,所述根據(jù)組合得到的數(shù)據(jù)的比特位數(shù)對組合得到的數(shù)據(jù)進(jìn)行填充,具體包括用所述組合得到數(shù)據(jù)的比特位數(shù)作為填充數(shù)據(jù),填充得到的所述原始數(shù)據(jù)的比特位數(shù)為512的整數(shù)倍。其中,所述一組字寄存器可以為5個或8個字寄存器;當(dāng)所述一組字寄存器為5個時,所述步驟d中生成的所述一組字為79個字?jǐn)?shù)據(jù);當(dāng)所述一組字寄存器為8個時,所述步驟d中生成的所述一組字為132個字?jǐn)?shù)據(jù)。進(jìn)一步地,所述步驟d具體包括
將所述原始數(shù)據(jù)的當(dāng)前段數(shù)據(jù)每32位劃分為一個字?jǐn)?shù)據(jù),得到16個字?jǐn)?shù)據(jù),順序?qū)σ训玫降淖謹(jǐn)?shù)據(jù)進(jìn)行異或和/或與運(yùn)算和/或模加運(yùn)算和/或移位得到所述一組字。其中,所述步驟e中CPU對所述一組字寄存器中當(dāng)前數(shù)據(jù)及所述一組字進(jìn)行處理具體為對所述一組字?jǐn)?shù)據(jù)中不同字?jǐn)?shù)據(jù)及所述一組字寄存器中不同寄存器中的數(shù)據(jù)進(jìn)行異或運(yùn)算、與運(yùn)算、模加運(yùn)算、移位操作,并不斷用操作結(jié)果更新所述一組字寄存器中的數(shù)據(jù),直到歷遍所述一組字中所有的字。根據(jù)本發(fā)明的另一方面,提供了又一種在嵌入式系統(tǒng)中生成動態(tài)口令的方法,包括A =CPU檢測到生成動態(tài)口令的預(yù)設(shè)條件;B :所述CPU判斷預(yù)設(shè)分段的第一緩存區(qū)中是否存在數(shù)據(jù),是則執(zhí)行步驟D,否則執(zhí)行步驟C ;C :所述CPU根據(jù)第二緩存區(qū)中的數(shù)據(jù)生成當(dāng)前動態(tài)因子,并用當(dāng)前動態(tài)因子更新所述第二緩存區(qū)中的數(shù)據(jù),調(diào)用存儲器中的靜態(tài)因子,并根據(jù)所述當(dāng)前動態(tài)因子及所述靜態(tài)因子生成固定長度數(shù)據(jù)串,并用所述固定長度數(shù)據(jù)串更新所述第一緩存區(qū)中的數(shù)據(jù);D :所述CPU根據(jù)預(yù)設(shè)方式在預(yù)設(shè)分段的所述第一緩存區(qū)中查找到待輸出的數(shù)據(jù)段,并將所述待輸出的數(shù)據(jù)段作為動態(tài)口令輸出,同時清除所述待輸出的數(shù)據(jù)段。其中,所述生成動態(tài)口令的預(yù)設(shè)條件為定時觸發(fā)器每隔預(yù)設(shè)時間觸發(fā)的生成動態(tài)口令信號或按鍵觸發(fā)生成的動態(tài)口令生成指令。所述步驟C中所述生成當(dāng)前動態(tài)因子具體為所述CPU將所述第二緩存區(qū)中的數(shù)據(jù)增加第二預(yù)設(shè)值,得到當(dāng)前動態(tài)因子;或,所述CPU獲取計時器計時時間得到所述當(dāng)前動態(tài)因子。其中,所述CPU檢測到生成動態(tài)口令的預(yù)設(shè)條件之后還包括計數(shù)器計數(shù)一次;所述生成當(dāng)前動態(tài)因子包括所述CPU根據(jù)所述計數(shù)器的計數(shù)值對所述第二緩存區(qū)中的數(shù)據(jù)進(jìn)行處理,生成所述當(dāng)前動態(tài)因子。進(jìn)一步地,所述預(yù)設(shè)分段的第一緩存區(qū)所分各存儲段等長;所述固定長度數(shù)據(jù)串長度大于或等于所述第一緩存區(qū)。 其中,所述CPU根據(jù)預(yù)設(shè)方式,在預(yù)設(shè)分段的所述第一緩存區(qū)中查找到待輸出的數(shù)據(jù)段,包括所述CPU按預(yù)設(shè)順序?qū)λ龅谝痪彺鎱^(qū)的各個存儲段進(jìn)行檢測,檢測到存儲有數(shù)據(jù)的存儲段,即將該存儲段中的數(shù)據(jù)作為所述待輸出的數(shù)據(jù)段;所述步驟D中清除所述查找到的數(shù)據(jù)段具體為所述CPU將查找到的數(shù)據(jù)段所在的存儲段清空。所述CPU根據(jù)預(yù)設(shè)方式,在預(yù)設(shè)分段的所述第一緩存區(qū)中查找到待輸出的數(shù)據(jù)段,包括所述CPU獲取所述第一緩存區(qū)高位端第一個存儲段中的數(shù)據(jù)得到所述待輸出的數(shù)據(jù)段;所述步驟D中清除所述查找到的數(shù)據(jù)段具體為所述CPU將所述第一緩存區(qū)中的數(shù)據(jù)左移一個存儲段的長度。進(jìn)一步地,所述CPU根據(jù)預(yù)設(shè)方式,在預(yù)設(shè)分段的所述第一緩存區(qū)中查找到待輸出的數(shù)據(jù)段,包括所述CPU獲取所述第一緩存區(qū)低位端第一個存儲段中的數(shù)據(jù)得到所述待輸出的數(shù)據(jù)段;所述步驟D中清除所述查找到的數(shù)據(jù)段具體為所述CPU將所述第一緩存區(qū)中的數(shù)據(jù)右移一個存儲段的長度。其中,所述靜態(tài)因子為密鑰;所述生成固定長度數(shù)據(jù)串,包括步驟a:所述CPU將當(dāng)前動態(tài)因子及所述靜態(tài)因子組合,根據(jù)組合得到的數(shù)據(jù)的比特位數(shù)對組合得到的數(shù)據(jù)進(jìn)行填充,得到原始數(shù)據(jù),并將所述原始數(shù)據(jù)緩存在第三緩存區(qū);步驟b 對一組字寄存器設(shè)置初始值;步驟c :按照512個比特位對所述第三緩存區(qū)中的數(shù)據(jù)按進(jìn)行分段,并將偏移指針初始位置指向第一段數(shù)據(jù);步驟d:根據(jù)所述原始數(shù)據(jù)的當(dāng)前段數(shù)據(jù)進(jìn)行消息擴(kuò)展,生成一組字?jǐn)?shù)據(jù);步驟e:所述CPU對所述一組字寄存器中當(dāng)前數(shù)據(jù)及所述一組字?jǐn)?shù)據(jù)進(jìn)行處理,并用處理結(jié)果更新所述一組字寄存器中的數(shù)據(jù);步驟f :判斷所述原始數(shù)據(jù)的當(dāng)前段數(shù)據(jù)是否為最后一段數(shù)據(jù),是則執(zhí)行步驟g,否則將偏移指針右移指向原始數(shù)據(jù)的下一段數(shù)據(jù),返回步驟d ;步驟g :獲取所述一組字寄存器存儲的數(shù)據(jù),得到所述固定長度數(shù)據(jù)串。
其中,所述根據(jù)組合得到的數(shù)據(jù)的比特位數(shù)對組合得到的數(shù)據(jù)進(jìn)行填充,具體包括用所述組合得到數(shù)據(jù)的比特位數(shù)作為填充數(shù)據(jù),填充得到的所述原始數(shù)據(jù)的比特位數(shù)為512的整數(shù)倍。所述一組字寄存器可以為5個或8個字寄存器;當(dāng)所述一組字寄存器為5個時,所述步驟d中生成的所述一組字為79個字?jǐn)?shù)據(jù);當(dāng)所述一組字寄存器為8個時,所述步驟d中生成的所述一組字為132個字?jǐn)?shù)據(jù)。其中所述步驟d具體包括將所述原始數(shù)據(jù)的當(dāng)前段數(shù)據(jù)每32位劃分為一個字?jǐn)?shù)據(jù),得到16個字?jǐn)?shù)據(jù),順序?qū)σ训玫降淖诌M(jìn)行異或和/或與運(yùn)算和/或模加運(yùn)算和/或移位得到所述一組字?jǐn)?shù)據(jù)。
所述步驟中CPU對所述一組字寄存器中當(dāng)前數(shù)據(jù)及所述一組字進(jìn)行處理具體為對一組字中不同字?jǐn)?shù)據(jù)及所述一組字寄存器中不同寄存器中的數(shù)據(jù)進(jìn)行異或運(yùn)算、與運(yùn)算、模加運(yùn)算、移位操作,并不斷用操作結(jié)果更新所述一組字寄存器中的數(shù)據(jù),直到歷遍所述一組字?jǐn)?shù)據(jù)中所有的字?jǐn)?shù)據(jù)。根據(jù)本發(fā)明的另一方面,提供了一種在嵌入式系統(tǒng)中生成動態(tài)口令的裝置,其特征在于包括檢測模塊用于檢測生成動態(tài)口令條件;計時模塊用于在所述檢測模塊檢測到生成動態(tài)口令條件時,根據(jù)計時時間生成當(dāng)前動態(tài)值;第一存儲模塊用于存儲第一預(yù)設(shè)值及靜態(tài)因子;第一生成模塊用于根據(jù)當(dāng)前動態(tài)值和/或所述第一存儲模塊中的第一預(yù)設(shè)值生成尋址指針的值;第一判斷模塊用于根據(jù)當(dāng)前動態(tài)值、所述第一預(yù)設(shè)值及所述尋址指針的值判斷是否需要生成固定長度的數(shù)據(jù)串;第二生成模塊用于在所述第一判斷模塊判斷需要生成固定長度的數(shù)據(jù)串時,根據(jù)當(dāng)前動態(tài)值、所述第一預(yù)設(shè)值或所述尋址指針的值生成當(dāng)前動態(tài)因子;并根據(jù)當(dāng)前動態(tài)因子及所述第一存儲模塊存儲的所述靜態(tài)因子生成固定長度數(shù)據(jù)串;第一緩存模塊用于存儲所述生成模塊生成的所述固定長度數(shù)據(jù)串;尋址模塊用于對所述第一緩存模塊中存儲的所述固定長度數(shù)據(jù)串進(jìn)行劃分,并根據(jù)所述尋址指針的值尋找相應(yīng)的數(shù)據(jù)段;輸出模塊用于將所述尋找模塊根據(jù)所述尋址指針的值尋找到的相應(yīng)的數(shù)據(jù)段作為動態(tài)口令輸出。其中,所述計時模塊包括計數(shù)單元及計時單元,所述計時單元用于計時,并在計時達(dá)到預(yù)設(shè)時間時清零重新開始計時;所述計數(shù)單元用于當(dāng)所述計時單元計時達(dá)到所述預(yù)設(shè)時間時計數(shù)一次;所述檢測模塊檢測到所述計時單元計時達(dá)到所述預(yù)設(shè)時間或檢測到所述計數(shù)單元計數(shù)一次時,即檢測到所述生成動態(tài)口令條件,所述計數(shù)單元還用于根據(jù)所述計時單元的計時時間生成當(dāng)前動態(tài)值。另外,還包括按鍵輸入模塊,所述按鍵輸入模塊用于接收按鍵觸發(fā)生成動態(tài)口令生成指令,當(dāng)所述檢測模塊檢測到動態(tài)口令生成指令即檢測到所述生成動態(tài)口令預(yù)設(shè)條件。通過本發(fā)明提供的方案,實現(xiàn)一次復(fù)雜運(yùn)算能夠得到多組動態(tài)口令,在保證動態(tài)口令安全的前提下,降低了動態(tài)口令頻繁生成對硬件的損耗,且降低了生成動態(tài)口令的耗時。
圖I為本發(fā)明實施例I提供的一種在嵌入式系統(tǒng)中生成動態(tài)口令的方法流程圖;圖2為本發(fā)明實施例2提供的一種在嵌入式系統(tǒng)中生成動態(tài)口令的方法流程圖;圖3為本發(fā)明實施例3提供的一種在嵌入式系統(tǒng)中生成動態(tài)口令的方法流程圖;圖4為本發(fā)明實施例4提供的一種在嵌入式系統(tǒng)中生成動態(tài)口令的方法流程圖; 圖5為本發(fā)明實施例4提供的一種固定長度數(shù)據(jù)串的生成方法流程圖;圖6為本發(fā)明實施例5提供的又一種固定長度數(shù)據(jù)串的生成方法流程圖;圖7為本發(fā)明實施例6提供的一種在嵌入式系統(tǒng)中生成動態(tài)口令的裝置方框圖。
具體實施例方式下面將結(jié)合本發(fā)明實施例中的附圖,對本發(fā)明實施例中的技術(shù)方案進(jìn)行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例?;诒景l(fā)明中的實施例,本領(lǐng)域普通技術(shù)人員在沒有做出創(chuàng)造性勞動前提下所獲得的所有其他實施例,都屬于本發(fā)明保護(hù)的范圍。實施例I參見圖I,本發(fā)明實施例I提供了一種在嵌入式系統(tǒng)中生成動態(tài)口令的方法,具體如下步驟SI =CPU檢測到生成動態(tài)口令的預(yù)設(shè)條件;步驟S2 :根據(jù)計時器得到當(dāng)前動態(tài)值;步驟S3 :根據(jù)所述當(dāng)前動態(tài)值和/或第一預(yù)設(shè)值生成尋址指針的值,并根據(jù)所述當(dāng)前動態(tài)值或所述尋址指針的值判斷是否需要生成固定長度的數(shù)據(jù)串,是則執(zhí)行步驟S4,否則執(zhí)行步驟S6 ;步驟S4:生成當(dāng)前動態(tài)因子,調(diào)用預(yù)置在第一存儲器中的靜態(tài)因子,對所述當(dāng)前動態(tài)因子及所述靜態(tài)因子進(jìn)行處理,生成固定長度數(shù)據(jù)串,并用所述固定長度數(shù)據(jù)串更新第一緩存區(qū)中的數(shù)據(jù);步驟S5 :根據(jù)所述第一預(yù)設(shè)值對所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行分段;步驟S6 :根據(jù)尋址指針的值,在分段的所述第一緩存區(qū)中查找相應(yīng)的數(shù)據(jù)段,并將查找到的數(shù)據(jù)段的值作為動態(tài)口令輸出。實施例2參見圖2,本實施例以動態(tài)口令常顯為例,提供了一種在嵌入式系統(tǒng)中生成動態(tài)口令的方法,具體包括步驟101 :CPU監(jiān)測計時器,檢測到生成動態(tài)口令的預(yù)設(shè)條件;優(yōu)選地,在本實施例中,所述預(yù)設(shè)條件可以為計時器計時到達(dá)預(yù)設(shè)時間,同時計數(shù)器計數(shù)一次,計時器清零并重新計時,所述預(yù)設(shè)時間可以為30秒、60秒等,CPU將所述計數(shù)器設(shè)有初始值,且將所述計數(shù)器初始值存儲于第一存儲器。所述計時器還可以替換為定時觸發(fā)器,每隔所述預(yù)設(shè)時間觸發(fā)一次,所述CPU檢測到所述計時器的觸發(fā)信號即檢測到所述預(yù)設(shè)條件。優(yōu)選地,在本實施例中,所述計時器還可以為設(shè)有最大值及溢出標(biāo)志位的計時器,所述最大值即預(yù)設(shè)時間。當(dāng)所述CPU檢測到所述定時器的溢出標(biāo)志位置位即檢測到生成動態(tài)口令的預(yù)設(shè)條件,所述CPU檢測到所述預(yù)設(shè)條件后清除所述溢出標(biāo)志位,同時所述計數(shù)器計數(shù)一次。步驟102 :根據(jù)第一預(yù)設(shè)值獲取所述計數(shù)器初始值低位端相應(yīng)位數(shù)上的值得到比較值,獲取計數(shù)器計數(shù)值的低位端相應(yīng)位數(shù)上的的值并驗證是否與所述比較值一致,是則執(zhí)行步驟103,否則執(zhí)行步驟106 ; 優(yōu)選地,在本實施例中,所述第一預(yù)設(shè)值優(yōu)選為3或2,相應(yīng)的,所述比較值為所述計數(shù)器初始值的低位端3個比特或2個比特的值。步驟103 :CPU獲取所述計數(shù)器的計數(shù)值,得到當(dāng)前動態(tài)因子并用當(dāng)前動態(tài)因子更新第二緩存區(qū)中的數(shù)據(jù);優(yōu)選地,在本實施例中,步驟102至步驟103還可以替換為以下步驟步驟102’ :CPU判斷所述計數(shù)器的值是否達(dá)到第一預(yù)設(shè)值加上I的值,是則將計數(shù)器清零,執(zhí)行步驟103’,否則執(zhí)行步驟106 ;優(yōu)選地,在本步驟中,還可以用0至第一預(yù)設(shè)值的循環(huán)計數(shù)器替換所述計數(shù)器,則步驟102’相應(yīng)替換為CPU判斷循環(huán)計數(shù)器的值是否為0,是則執(zhí)行步驟103’,否則執(zhí)行步驟106。替換后本實施例中所述第一預(yù)設(shè)值優(yōu)選為3或7。步驟103’ 更新第二緩存區(qū)中的動態(tài)因子,得到當(dāng)前動態(tài)因子;優(yōu)選地,在本實施例中,CPU更新第二緩存區(qū)中的動態(tài)因子具體為將第二緩存區(qū)中的動態(tài)因子自加一個第二預(yù)設(shè)值,得到所述當(dāng)前動態(tài)因子。步驟104 :CPU獲取預(yù)置在第二存儲器中的靜態(tài)因子,并根據(jù)靜態(tài)因子及當(dāng)前動態(tài)因子生成固定長度的數(shù)據(jù)串,并用該數(shù)據(jù)串更新第一緩沖區(qū)中的數(shù)據(jù);所述靜態(tài)因子可以為密鑰、硬件序列號等,優(yōu)選地,在本實施例中所述靜態(tài)因子為密鑰。優(yōu)選地,在本實施例中,CPU被啟用前在所述第一緩沖區(qū)內(nèi)預(yù)存有固定長度的初始數(shù)據(jù)。所述固定長度的數(shù)據(jù)串生成方法可以通過多種方法得出,本實施例中,所述固定長度數(shù)據(jù)串生成具體過程詳見實施例5或?qū)嵤├?。步驟105 :根據(jù)所述第一預(yù)設(shè)值對所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行分段;優(yōu)選地,在本實施例中,將所述第一緩存區(qū)分段得到的段數(shù)大于或等于第三預(yù)設(shè)值,該第三預(yù)設(shè)值為所述第一預(yù)設(shè)值作為2的冪數(shù)運(yùn)算得到的值,如,所述第一預(yù)設(shè)值為2,則至少分為4段;所述第一預(yù)設(shè)值為3,則至少分為8段。優(yōu)選地,在本實施例中,劃分得到的各數(shù)據(jù)段等長。若用步驟102’至步驟103’替換所述步驟102至步驟103,則步驟105中CPU對所述第一緩存區(qū)數(shù)據(jù)進(jìn)行分段的段數(shù)大于或等于所述第一預(yù)設(shè)值加I。步驟106 =CPU將獲取到的計數(shù)器的計數(shù)值的低位端相應(yīng)位數(shù)上的值與所述比較值的差值賦值給尋址指針;
優(yōu)選地,在本實施例中,若用步驟102’至步驟103’替換所述步驟102至步驟103,則步驟106相應(yīng)替換為CPU獲取所述計數(shù)器的計數(shù)值并賦值給尋址指針。優(yōu)選地,在本實施例中所述步驟106的操作在所述步驟102的時候執(zhí)行,相應(yīng)地,所述CPU執(zhí)行步驟105后執(zhí)行步驟107,所述步驟102的內(nèi)容替換為根據(jù)第一預(yù)設(shè)值,獲取所述計數(shù)器初始值低位端相應(yīng)位數(shù)上的值得到比較值,獲取計數(shù)器的計數(shù)值的低位端相應(yīng)位數(shù)上的值,將所述計數(shù)器的計數(shù)值的低位端相應(yīng)位數(shù)上的值與所述比較值相減得到尋址指針的值并賦值給尋址指針,判斷所述尋址指針的值是否為0,是則需要生成固定長度數(shù)據(jù)串,執(zhí)行步驟103,否則不需要,執(zhí)行步驟107。步驟107 :CPU根據(jù)尋址指針的值,在所述預(yù)設(shè)分段的第一緩沖區(qū)找到相應(yīng)的數(shù)據(jù)段;在本實施例中,所述尋址指針不同的值分別與所述第一緩存區(qū)劃分得到的數(shù)據(jù)段中的一段相對應(yīng)。 步驟108 :獲取找到的數(shù)據(jù)段,并將該數(shù)據(jù)段數(shù)據(jù)作為動態(tài)口令輸出。優(yōu)選地,在本實施例中,輸出的動態(tài)口令位數(shù)為預(yù)設(shè)位數(shù),具體為,取十進(jìn)制表示的所述數(shù)據(jù)段的低位端預(yù)設(shè)位數(shù)上的數(shù)據(jù)作為動態(tài)口令輸出。實施例3參見圖3,在本實施例中,以按鍵觸發(fā)生成動態(tài)口令為例,提供了又一種在嵌入式系統(tǒng)中生成動態(tài)口令的方法,具體步驟如下步驟201 :CPU接收動態(tài)口令生成指令;步驟202 :CPU獲取計時器所計的當(dāng)前時間,并根據(jù)當(dāng)前時間及預(yù)設(shè)時間得到當(dāng)前動態(tài)值;優(yōu)選地,在本實施例中,所述預(yù)設(shè)時間預(yù)置在第一存儲空間,所述計時器預(yù)設(shè)有初始時間,所述當(dāng)前動態(tài)值即從所述初始時間到當(dāng)前時間經(jīng)過的所述預(yù)設(shè)時間的個數(shù),在本實施例中,根據(jù)當(dāng)前時間及預(yù)設(shè)時間得到所述當(dāng)前動態(tài)值具體為用當(dāng)前時間值對所述預(yù)設(shè)時間值進(jìn)行取模運(yùn)算,用當(dāng)前動態(tài)值與取模運(yùn)算結(jié)果的差值除以預(yù)設(shè)時間值即得到當(dāng)前動態(tài)值,本實施例中以所述預(yù)設(shè)時間為60秒為例。例如當(dāng)前時間與所述初始時間相差31453203秒,則所述當(dāng)前動態(tài)值則相應(yīng)地為524220。步驟203 :根據(jù)存儲在第二存儲空間的第一預(yù)設(shè)值,生成尋址指針的值,并賦值給尋址指針;優(yōu)選地,在本實施例中,所述第一預(yù)設(shè)值取8為例,根據(jù)所述第一預(yù)設(shè)值生成所述尋址指針的值方法為用當(dāng)前動態(tài)值對所述第一預(yù)設(shè)值進(jìn)行取模運(yùn)算,得到所述尋址指針的值。例如,當(dāng)前動態(tài)值為524220,則所述尋址指針的值相應(yīng)為4。步驟204 :根據(jù)當(dāng)前當(dāng)前動態(tài)值及所述尋址指針的值,生成當(dāng)前動態(tài)因子并緩存;優(yōu)選地,在本實施例中,CPU用所述當(dāng)前動態(tài)值減去所述尋址指針的值得到所述當(dāng)前動態(tài)因子。步驟205 :驗證當(dāng)前動態(tài)因子是否與第二緩存區(qū)存儲的動態(tài)因子一致,是則執(zhí)行步驟207,否則用當(dāng)前動態(tài)因子更新第二緩存區(qū)的數(shù)據(jù);步驟206 :CPU調(diào)用預(yù)置在第一存儲器中的密鑰,根據(jù)當(dāng)前動態(tài)因子及密鑰生成固定長度的數(shù)據(jù)串,并用該數(shù)據(jù)串更新第一緩存區(qū)中的數(shù)據(jù);
根據(jù)當(dāng)前動態(tài)因子及密鑰生成固定長度數(shù)據(jù)串的方式有多種,在本實施例中,生成固定長度數(shù)據(jù)串的方式詳見實施例5或?qū)嵤├?。步驟207 :CPU根據(jù)尋址指針的值,在所述預(yù)設(shè)分段的第一緩沖區(qū)查找相應(yīng)的數(shù)據(jù)段;在本實施例中,所述第一緩沖區(qū)被劃分的段數(shù)大于或等于所述第一預(yù)設(shè)值,劃分得到的數(shù)據(jù)段與所述尋址指針的值一一對應(yīng)。步驟208 :獲取找到的數(shù)據(jù)段,并將該數(shù)據(jù)段數(shù)據(jù)作為動態(tài)口令輸出。實施例4參見圖4,本發(fā)明實施例4提供了再一種在嵌入式系統(tǒng)中生成動態(tài)口令的方法,具體包括
301 =CPU檢測到生成動態(tài)口令的預(yù)設(shè)條件;302:判斷預(yù)設(shè)分段的第一緩存區(qū)中是否存在數(shù)據(jù),是則執(zhí)行步驟304,否則執(zhí)行步驟303 ;優(yōu)選地,在本實施例中,該步驟可以替換為302’ 判斷預(yù)設(shè)分段的第一緩存區(qū)中的第一存儲段是否存在數(shù)據(jù),是則執(zhí)行304,否則執(zhí)行303。所述第一存儲段可以為第一緩存區(qū)高位端第一段,也可以為低位端第一段。303:生成當(dāng)前動態(tài)因子,調(diào)用存儲器中的靜態(tài)因子,并根據(jù)所述當(dāng)前動態(tài)因子及所述密鑰生成固定長度數(shù)據(jù)串,并將所述固定長度數(shù)據(jù)串緩存在預(yù)設(shè)分段的第一緩存區(qū);所述靜態(tài)因子可以為密鑰、硬件序列號等,優(yōu)選地,在本實施例中以所述靜態(tài)因子為密鑰為例。優(yōu)選地,在本實施例中,所述第一緩存的長度大于或等于所述固定長度數(shù)據(jù)串的長度,所述第一緩存區(qū)所分的各存儲段長度相等。該步驟中,生成當(dāng)前動態(tài)因子可以為根據(jù)計時器計時時間得到;也可以為將第二緩存區(qū)中的數(shù)據(jù)自增第二預(yù)設(shè)值得到,同時用當(dāng)前動態(tài)因子更新第二緩存區(qū)中數(shù)據(jù);還可以為所述CPU每檢測到生成動態(tài)口令的預(yù)設(shè)條件均將計數(shù)器計數(shù)一次,生成當(dāng)前動態(tài)因子為根據(jù)計數(shù)器的計數(shù)值及所述第二緩存區(qū)中的數(shù)據(jù)得到,如所述第二緩存區(qū)中的數(shù)據(jù)自增所述計數(shù)值得到當(dāng)前動態(tài)因子。304 :CPU在所述第一緩存區(qū)中找到相應(yīng)的數(shù)據(jù)段,作為動態(tài)口令輸出;具體地,在本實施例中,該步驟中CPU找到相應(yīng)數(shù)據(jù)段具體為CPU按預(yù)設(shè)順序在所述第一緩存區(qū)中查找存在數(shù)據(jù)的存儲段,找到存在數(shù)據(jù)的存儲段時,將該存儲段中的數(shù)據(jù)作為找到的數(shù)據(jù)段作為動態(tài)口令輸出,同時清空存儲該存儲段的緩存區(qū);相應(yīng)地,在本實施例中,當(dāng)所述步驟S2替換為步驟S2’時,則步驟S4具體為獲取所述第一緩存區(qū)高位端第一存儲段中數(shù)據(jù)即得到所述相應(yīng)的數(shù)據(jù)段,將該數(shù)據(jù)段作為動態(tài)口令輸出,同時第一緩存區(qū)中的數(shù)據(jù)左移一個存儲段的長度。所述獲取第一緩存區(qū)高位端第一存儲段中數(shù)據(jù)也可以替換為獲取第一緩存區(qū)低位端第一存儲段中數(shù)據(jù),相應(yīng)地,輸出動態(tài)口令后,第一緩存區(qū)中的數(shù)據(jù)右移一個存儲段的長度。實施例5參見圖5,本發(fā)明實施例5提供了一種生成固定長度數(shù)據(jù)串的方法,CPU生成固定長度數(shù)據(jù)串過程具體為
步驟401 :CPU將當(dāng)前動態(tài)因子及靜態(tài)因子組合,根據(jù)組合得到的數(shù)據(jù)的比特位數(shù)對組合得到數(shù)據(jù)進(jìn)行填充得到原始數(shù)據(jù),并將所述原始數(shù)據(jù)緩存在第三緩存區(qū);具體地,在本實施例中,填充得到的原始數(shù)據(jù)的比特位數(shù)為512的倍數(shù),其中填充比特位數(shù)大于等于I位且小于512,填充所用數(shù)據(jù)可以為預(yù)置數(shù)據(jù)和/或組合數(shù)據(jù)的的比特位數(shù)等。步驟402 =CPU對第一至第八字寄存器設(shè)初始值;在本實施例中,每個字寄存器為32比特,第一至第八字寄存器設(shè)置的初始值分貝為 0x7380166F 4914B2B9 172442D7 DA8A0600 A96F30BC 163138AA E38DEE4D B0FB0E4E ;步驟403 :從第三緩存區(qū)高位到低位將原始數(shù)據(jù)中以512個比特位為單元進(jìn)行劃分,并將偏移指針初始位置指向原始數(shù)據(jù)左端第一段數(shù)據(jù);
步驟404 :根據(jù)原始數(shù)據(jù)的當(dāng)前段數(shù)據(jù)進(jìn)行消息擴(kuò)展,生成132個字?jǐn)?shù)據(jù);生成132個字?jǐn)?shù)據(jù)具體為將當(dāng)前段數(shù)據(jù)每32位為一個字劃分得到第I個至第16個字?jǐn)?shù)據(jù),根據(jù)得到字進(jìn)行異或、與、模加、循環(huán)移位等變換得到后續(xù)116個字?jǐn)?shù)據(jù)。步驟405 :CPU執(zhí)行壓縮函數(shù),對第一至第八寄存器中的數(shù)據(jù)及根據(jù)原始數(shù)據(jù)的當(dāng)前段生成的132個字?jǐn)?shù)據(jù)進(jìn)行處理,并用處理結(jié)果更新第一至第八字寄存器的值;步驟406:判斷原始數(shù)據(jù)的當(dāng)前段數(shù)據(jù)是否為最后一段數(shù)據(jù),是則執(zhí)行步驟407,否則將偏移指針右移指向原始數(shù)據(jù)的下一段數(shù)據(jù),返回步驟404 ;步驟407 :將第一至第八字寄存器中的值順序存入預(yù)設(shè)分段的緩沖區(qū),得到固定長度數(shù)據(jù)串。實施例6參見圖6,本發(fā)明實施例6提供了又一種生成固定長度數(shù)據(jù)串的方法,具體包括步驟501 :CPU將動態(tài)因子及密鑰組合,根據(jù)組合得到的數(shù)據(jù)的比特位數(shù)對組合得到數(shù)據(jù)進(jìn)行填充得到原始數(shù)據(jù),并將原始數(shù)據(jù)緩存在第三緩存區(qū);具體地,在本實施例中,填充得到的原始數(shù)據(jù)的比特位數(shù)為512的倍數(shù),其中填充比特位數(shù)大于等于I位且小于512,填充所用數(shù)據(jù)可以為預(yù)置數(shù)據(jù)和/或組合數(shù)據(jù)的的比特位數(shù)或字節(jié)數(shù)等。步驟502 =CPU對第一至第五字寄存器設(shè)初始值;在本實施例中,每個字寄存器為32比特,第一至第五字寄存器設(shè)置的初始值分別為 Ox 67452301 EFCDAB89 98BADCFE 10325476 C3D2E1F0 ;步驟503 :從第三緩存區(qū)高位到低位將原始數(shù)據(jù)以512個比特位為單位進(jìn)行劃分,并將偏移指針初始位置指向原始數(shù)據(jù)左端第一段數(shù)據(jù);步驟504 :根據(jù)原始數(shù)據(jù)的當(dāng)前段數(shù)據(jù)進(jìn)行消息擴(kuò)展,生成80個字?jǐn)?shù)據(jù);優(yōu)選地,在本實施例中根據(jù)當(dāng)前段數(shù)據(jù)進(jìn)行消息擴(kuò)展生成80個字?jǐn)?shù)據(jù)具體為將當(dāng)前段數(shù)據(jù)每32位為一個字劃分得到第I個至第16個字?jǐn)?shù)據(jù),根據(jù)得到字進(jìn)行異或、與、模加、循環(huán)移位等變換得到后第17個字?jǐn)?shù)據(jù),以此方式根據(jù)已得到的字?jǐn)?shù)據(jù)進(jìn)行處理得到后續(xù)的字?jǐn)?shù)據(jù)。步驟505 :CPU執(zhí)行壓縮函數(shù),對第一至第八寄存器中的數(shù)據(jù)及根據(jù)原始數(shù)據(jù)當(dāng)前段生成的80個字?jǐn)?shù)據(jù)進(jìn)行處理,并用處理結(jié)果更新第一至第五字寄存器的值;步驟506:判斷原始數(shù)據(jù)的當(dāng)前段數(shù)據(jù)是否為最后一段數(shù)據(jù),是則執(zhí)行步驟507,否則將偏移指針右移指向原始數(shù)據(jù)的下一段數(shù)據(jù),返回步驟504 ;步驟507 :將第一至第五字寄存器中的值順序存入預(yù)設(shè)分段的緩沖區(qū),得到固定長度數(shù)據(jù)串。實施例7參見圖7,本發(fā)明實施例7提供了一種在嵌入式系統(tǒng)中生成動態(tài)口令的裝置,包括檢測模塊601 :用于檢測生成動態(tài)口令條件;計時模塊602 :用于在所述檢測模塊601檢測到生成動態(tài)口令條件時,根據(jù)計時時間生成當(dāng)前動態(tài)值;所述計時模塊602包括計時單元6021、計數(shù)單元6022, 所述計時單元6021,用于計時,并在計時達(dá)到預(yù)設(shè)時間時清零重新開始計時;所述計數(shù)單元6022,用于當(dāng)所述計時單元6021計時達(dá)到所述預(yù)設(shè)時間時計數(shù)一次;當(dāng)檢測模塊601檢測到所述生成動態(tài)口令條件,計數(shù)單元6022還用于根據(jù)計時單元6021的計時時間生成當(dāng)前動態(tài)值;第一存儲模塊603 :用于存儲第一預(yù)設(shè)值及靜態(tài)因子;第一生成模塊604 :用于根據(jù)當(dāng)前動態(tài)值及所述第一存儲模塊603中的第一預(yù)設(shè)值生成尋址指針的值;第一判斷模塊605:用于根據(jù)當(dāng)前動態(tài)值、所述第一預(yù)設(shè)值及所述尋址指針的值判斷是否需要生成固定長度的數(shù)據(jù)串;第二生成模塊606 :用于在所述第一判斷模塊605判斷需要生成固定長度的數(shù)據(jù)串時,根據(jù)當(dāng)前動態(tài)值、所述第一預(yù)設(shè)值或所述尋址指針的值生成當(dāng)前動態(tài)因子;獲取所述第一存儲模塊603中的靜態(tài)因子,并根據(jù)當(dāng)前動態(tài)因子及所述所述靜態(tài)因子生成固定長度數(shù)據(jù)串;第一緩存模塊607 :用于存儲所述生成模塊606生成的所述固定長度數(shù)據(jù)串;尋址模塊608 :用于對所述第一緩存模塊608中存儲的所述固定長度數(shù)據(jù)串進(jìn)行劃分,并根據(jù)所述尋址指針的值尋找相應(yīng)的數(shù)據(jù)段;輸出模塊609 :用于將所述尋找模塊608根據(jù)所述尋址指針的值尋找到的相應(yīng)的數(shù)據(jù)段作為動態(tài)口令輸出。優(yōu)選地,在本實施例中所述裝載還可以包括按鍵模塊610,用于接收按鍵觸發(fā)生成的動態(tài)口令生成指令,當(dāng)所述檢測模塊檢601測到動態(tài)口令生成指令即檢測到所述生成動態(tài)口令預(yù)設(shè)條件。
權(quán)利要求
1.一種在嵌入式系統(tǒng)中生成動態(tài)口令的方法,其特征在于,包括 步驟SI :CPU檢測到生成動態(tài)口令的預(yù)設(shè)條件; 步驟S2 :根據(jù)計時器得到當(dāng)前動態(tài)值; 步驟S3 :根據(jù)所述當(dāng)前動態(tài)值和/或第一預(yù)設(shè)值生成尋址指針的值,并根據(jù)所述當(dāng)前動態(tài)值或所述尋址指針的值判斷是否需要生成固定長度的數(shù)據(jù)串,是則執(zhí)行步驟S4,否則執(zhí)行步驟S6 ; 步驟S4:生成當(dāng)前動態(tài)因子,調(diào)用預(yù)置在第一存儲器中的靜態(tài)因子,對所述當(dāng)前動態(tài)因子及所述靜態(tài)因子進(jìn)行處理生成固定長度數(shù)據(jù)串,并用所述固定長度數(shù)據(jù)串更新第一緩存區(qū)中的數(shù)據(jù); 步驟S5 :根據(jù)所述第一預(yù)設(shè)值對所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行分段; 步驟S6 :根據(jù)所述尋址指針的值,在分段的所述第一緩存區(qū)中查找相應(yīng) 的數(shù)據(jù)段,并將查找到的數(shù)據(jù)段的值作為動態(tài)口令輸出。
2.>如權(quán)利要求I所述的方法,其特征在于,所述計時器為定時觸發(fā)器,每隔預(yù)設(shè)時間觸發(fā)一次; 所述預(yù)設(shè)條件為所述定時觸發(fā)器觸發(fā)信號。
3.如權(quán)利要求I所述的方法,其特征在于,所述計時器設(shè)有最大值及溢標(biāo)志位,所述預(yù)設(shè)條件為所述計時器的溢出標(biāo)志位置位;所述步驟SI中檢測到所述預(yù)設(shè)條件后還包括將所述計時器的溢出標(biāo)志位復(fù)位。
4.如權(quán)利要求I所述的方法,其特征在于,所述預(yù)設(shè)條件為所述計時器計時達(dá)到預(yù)設(shè)時間,所述步驟SI中所述CPU檢測到所述預(yù)設(shè)條件后還包括將所述計時器清零,重新開始計時。
5.如權(quán)利要求2或3或4所述的方法,其特征在于, 所述步驟S2中所述根據(jù)計時器得到當(dāng)前動態(tài)值具體為所述計時器滿足所述預(yù)設(shè)條件后,計數(shù)器計數(shù)一次,所述CPU獲取所述計數(shù)器的計數(shù)值得到所述當(dāng)前動態(tài)值。
6.如權(quán)利要求5所述的方法,其特征在于,所述計數(shù)器為從O到所述第一預(yù)設(shè)值的循環(huán)計數(shù)器,獲取到的所述當(dāng)前動態(tài)值即所述尋址指針的值,所述步驟S3中判斷是否生成固定長度的數(shù)據(jù)串具體為 所述CPU判斷所述計數(shù)器的計數(shù)值或所述尋址指針的值是否為O,是則需要生成所述固定長度數(shù)據(jù)串,否則不需要。
7.如權(quán)利要求6所述的方法,其特征在于,當(dāng)所述CPU判斷需要生成固定長度數(shù)據(jù)串時,所述步驟S4中生成所述當(dāng)前動態(tài)因子具體為將第二緩存區(qū)中的數(shù)據(jù)自增第二預(yù)設(shè)值得到所述當(dāng)前動態(tài)因子,并用所述當(dāng)前動態(tài)因子更新第二緩存區(qū); 所述步驟S5中根據(jù)所述第一預(yù)設(shè)值對所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行分段具體為將所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行等長分段,所分段數(shù)大于或等于所述第一預(yù)設(shè)值加I的值。
8.如權(quán)利要求5所述的方法,其特征在于,所述步驟S3具體為 所述CPU用所述當(dāng)前動態(tài)值對所述第一預(yù)設(shè)值進(jìn)行取模運(yùn)算,得到所述尋址指針的值,并賦值給尋址指針; 判斷所述尋址指針的值是否為O,是則需要生成固定長度的數(shù)據(jù)串,否則不需要生成固定長度的數(shù)據(jù)串。
9.如權(quán)利要求8所述的方法,其特征在于,當(dāng)所述CPU判斷需要生產(chǎn)固定長度數(shù)據(jù)串時,所述步驟S4中生成所述當(dāng)前動態(tài)因子具體為獲取當(dāng)前動態(tài)值將其作為當(dāng)前動態(tài)因子; 所述步驟S5中根據(jù)所述第一預(yù)設(shè)值對所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行分 段具體為將所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行等長分段,所分段數(shù)大于或等于所述第一預(yù)設(shè)值。
10.如權(quán)利要求5所述的方法,其特征在于,所述計數(shù)器設(shè)有初始值,所述CPU將計數(shù)器的初始值存儲于第二存儲器,所述步驟S3具體為 所述CPU根據(jù)所述第一預(yù)設(shè)值,分別獲取所述當(dāng)前動態(tài)值與所述計數(shù)器初始值的低位端相應(yīng)比特位數(shù)的數(shù)據(jù),用得到的當(dāng)前動態(tài)值的低位端數(shù)據(jù)減所述計數(shù)器初始值的低位端數(shù)據(jù)得到所述尋址指針的值,并將所述尋址指針的值賦值給尋址指針; 判斷所述尋址指針的值是否為0,是則需要生成固定長度的數(shù)據(jù)串,否則不需要生成固定長度的數(shù)據(jù)串。
11.如權(quán)利要求10所述的方法,其特征在于,當(dāng)所述CPU判斷需要生產(chǎn)固定長度數(shù)據(jù)串時,所述步驟S4中生成當(dāng)前動態(tài)因子具體為獲取當(dāng)前動態(tài)值并將其作為當(dāng)前動態(tài)因子; 步驟S5中根據(jù)所述第一預(yù)設(shè)值對所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行分段具體為所述CPU對所述第一緩存區(qū)的數(shù)據(jù)進(jìn)行等長分段,所分段數(shù)大于或等于第三預(yù)設(shè)值,所述第三預(yù)設(shè)值為以2為底數(shù)、以所述第一預(yù)設(shè)值為冪數(shù)的計算結(jié)果。
12.如權(quán)利要求I所述的方法,其特征在于,所述步驟SI具體為所述CPU接收到按鍵觸發(fā)生成動態(tài)口令生成指令。
13.如權(quán)利要求12所述的方法,其特征在于,所述步驟S2中根據(jù)計時器生成所述當(dāng)前動態(tài)值具體為所述CPU獲取計時器所計時間,并根據(jù)預(yù)設(shè)時間對所述當(dāng)前動態(tài)值進(jìn)行處理,得到當(dāng)前動態(tài)值。
14.如權(quán)利要求13所述的方法,其特征在于,所述步驟S3具體包括 所述CPU用得到的當(dāng)前動態(tài)值對所述第一預(yù)設(shè)值進(jìn)行取模運(yùn)算,得到尋址指針的值,并賦值給尋址指針; 判斷當(dāng)前動態(tài)值與所述尋址指針的值的差值與第二緩存區(qū)中存儲的數(shù)據(jù)是否一致,是則不需要生成固定長度的數(shù)據(jù)串,否則需要生成。
15.如權(quán)利要求14所述的方法,其特征在于,當(dāng)所述CPU判斷需要生成固定長度的數(shù)據(jù)串時,所述步驟S4中的生成當(dāng)前動態(tài)因子具體為用當(dāng)前動態(tài)值減去尋址指針的值得到當(dāng)前動態(tài)因子,所述步驟S4之后還包括所述CPU用所述當(dāng)前動態(tài)因子更新所述第二緩存區(qū)中的數(shù)據(jù); 所述步驟S5中根據(jù)所述第一預(yù)設(shè)值對所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行分段具體為將所述第一緩存區(qū)中的數(shù)據(jù)進(jìn)行等長分段,所分段數(shù)大于或等于所述第一預(yù)設(shè)值。
16.根據(jù)權(quán)利要求I所述的方法,其特征在于,所述靜態(tài)因子為密鑰,所述步驟S4中對當(dāng)前動態(tài)因子及所述靜態(tài)因子進(jìn)行處理生成固定長度數(shù)據(jù)串具體包括 步驟a:所述CPU將當(dāng)前動態(tài)因子及所述靜態(tài)因子組合,根據(jù)組合得到的數(shù)據(jù)的比特位數(shù)對組合得到的數(shù)據(jù)進(jìn)行填充,得到原始數(shù)據(jù),并將所述原始數(shù)據(jù)緩存在第三緩存區(qū); 步驟b:對一組字寄存器設(shè)置初始值;步驟C :按照512個比特位對所述第三緩存區(qū)中的數(shù)據(jù)按進(jìn)行分段,并將偏移指針初始位置指向第一段數(shù)據(jù); 步驟d:根據(jù)所述原始數(shù)據(jù)的當(dāng)前段數(shù)據(jù)進(jìn)行消息擴(kuò)展,生成一組字?jǐn)?shù)據(jù); 步驟e :所述CPU對所述一組字寄存器中當(dāng)前數(shù)據(jù)及所述一組字?jǐn)?shù)據(jù)進(jìn)行處理,并用處理結(jié)果更新所述一組字 寄存器中的數(shù)據(jù); 步驟f :判斷所述原始數(shù)據(jù)的當(dāng)前段數(shù)據(jù)是否為最后一段數(shù)據(jù),是則執(zhí)行步驟g,否則將偏移指針右移指向原始數(shù)據(jù)的下一段數(shù)據(jù),返回步驟d ; 步驟g:獲取所述一組字寄存器存儲的數(shù)據(jù),得到所述固定長度數(shù)據(jù)串。
17.如權(quán)利要求16所述的方法,其特征在于,所述根據(jù)組合得到的數(shù)據(jù)的比特位數(shù)對 組合得到的數(shù)據(jù)進(jìn)行填充,具體包括用所述組合得到數(shù)據(jù)的比特位數(shù)作為填充數(shù)據(jù),填充得到的所述原始數(shù)據(jù)的比特位數(shù)為512的整數(shù)倍。
18.如權(quán)利要求17所述的方法,其特征在于,所述一組字寄存器可以為5個或8個字寄存器; 當(dāng)所述一組字寄存器為5個時,所述步驟d中生成的所述一組字為79個字?jǐn)?shù)據(jù); 當(dāng)所述一組字寄存器為8個時,所述步驟d中生成的所述一組字為132個字?jǐn)?shù)據(jù)。
19.如權(quán)利要求18所述的方法,其特征在于,所述步驟d具體包括 將所述原始數(shù)據(jù)的當(dāng)前段數(shù)據(jù)每32位劃分為一個字?jǐn)?shù)據(jù),得到16個字?jǐn)?shù)據(jù),順序?qū)σ训玫降淖謹(jǐn)?shù)據(jù)進(jìn)行異或和/或與運(yùn)算和/或模加運(yùn)算和/或移位得到所述一組字。
20.如權(quán)利要求19所述的方法,其特征在于,所述步驟e中CPU對所述一組字寄存器中當(dāng)前數(shù)據(jù)及所述一組字進(jìn)行處理具體為對所述一組字?jǐn)?shù)據(jù)中不同字?jǐn)?shù)據(jù)及所述一組字寄存器中不同寄存器中的數(shù)據(jù)進(jìn)行異或運(yùn)算、與運(yùn)算、模加運(yùn)算、移位操作,并不斷用操作結(jié) 果更新所述一組字寄存器中的數(shù)據(jù),直到歷遍所述一組字中所有的字。
21.—種在嵌入式系統(tǒng)中生成動態(tài)口令的方法,其特征在于,包括 A =CPU檢測到生成動態(tài)口令的預(yù)設(shè)條件; B :所述CPU判斷預(yù)設(shè)分段的第一緩存區(qū)中是否存在數(shù)據(jù),是則執(zhí)行步驟D,否則執(zhí)行步驟C ; C :生成當(dāng)前動態(tài)因子,并用當(dāng)前動態(tài)因子更新所述第二緩存區(qū)中的數(shù)據(jù),調(diào)用存儲器中的靜態(tài)因子,并根據(jù)所述當(dāng)前動態(tài)因子及所述靜態(tài)因子生成固定長度數(shù)據(jù)串,并用所述固定長度數(shù)據(jù)串更新所述第一緩存區(qū)中的數(shù)據(jù); D :所述CPU根據(jù)預(yù)設(shè)方式在預(yù)設(shè)分段的所述第一緩存區(qū)中查找到待輸出的數(shù)據(jù)段,并將所述待輸出的數(shù)據(jù)段作為動態(tài)口令輸出,同時清除所述待輸出的數(shù)據(jù)段。
22.如權(quán)利要求21所述的方法,其特征在于,所述生成動態(tài)口令的預(yù)設(shè)條件為定時觸發(fā)器每隔預(yù)設(shè)時間觸發(fā)的生成動態(tài)口令信號或按鍵觸發(fā)生成的動態(tài)口令生成指令。
23.如權(quán)利要求22所述的方法,其特征在于,所述步驟C中所述生成當(dāng)前動態(tài)因子具體為所述CPU將所述第二緩存區(qū)中的數(shù)據(jù)增加一個第二預(yù)設(shè)值,得到當(dāng)前動態(tài)因子; 或者,所述CPU獲取計時器計時時間,得到所述當(dāng)前動態(tài)因子。
24.如權(quán)利要求22所述的方法,其特征在于,所述CPU檢測到生成動態(tài)口令的預(yù)設(shè)條件之后還包括計數(shù)器計數(shù)一次; 所述步驟C中所述成當(dāng)前動態(tài)因子包括所述CPU根據(jù)所述計數(shù)器的計數(shù)值對所述第二緩存區(qū)中的數(shù)據(jù)進(jìn)行處理,生成所述當(dāng)前動態(tài)因子。
25.如權(quán)利要求23或24所述的方法,其特征在于,所述預(yù)設(shè)分段的第一緩存區(qū)所分各存儲段等長; 所述固定長度數(shù)據(jù)串長度大于或等于所述第一緩存區(qū)。
26.如權(quán)利要求25所述的方法,其特征在于,所述CPU根據(jù)預(yù)設(shè)方式,在預(yù)設(shè)分段的所述第一緩存區(qū)中查找到待輸出的數(shù)據(jù)段,包括所述CPU按預(yù)設(shè)順序?qū)λ龅谝痪彺鎱^(qū)的各個存儲段進(jìn)行檢測,檢測到存儲有數(shù)據(jù)的存儲段,即將該存儲段中的數(shù)據(jù)作為所述待輸出的數(shù)據(jù)段; 所述步驟D中清除所述查找到的數(shù)據(jù)段具體為所述CPU將查找到的數(shù)據(jù)段所在的存儲段清空。
27.如權(quán)利要求25所述的方法,其特征在于,所述CPU根據(jù)預(yù)設(shè)方式,在預(yù)設(shè)分段的所述第一緩存區(qū)中查找到待輸出的數(shù)據(jù)段,包括 所述CPU獲取所述第一緩存區(qū)高位端第一個存儲段中的數(shù)據(jù)得到所述待輸出的數(shù)據(jù)段; 所述步驟D中清除所述查找到的數(shù)據(jù)段具體為所述CPU將所述第一緩存區(qū)中的數(shù)據(jù)左移一個存儲段的長度。
28.如權(quán)利要求25所述的方法,其特征在于,所述CPU根據(jù)預(yù)設(shè)方式,在預(yù)設(shè)分段的所述第一緩存區(qū)中查找到待輸出的數(shù)據(jù)段,包括所述CPU獲取所述第一緩存區(qū)低位端第一個存儲段中的數(shù)據(jù)得到所述待輸出的數(shù)據(jù)段; 所述步驟D中清除所述查找到的數(shù)據(jù)段具體為所述CPU將所述第一緩存區(qū)中的數(shù)據(jù)右移一個存儲段的長度。
29.如權(quán)利要求21所述的方法,其特征在于,所述靜態(tài)因子為密鑰; 所述生成固定長度數(shù)據(jù)串,包括 步驟a:所述CPU將當(dāng)前動態(tài)因子及所述靜態(tài)因子組合,根據(jù)組合得到的數(shù)據(jù)的比特位數(shù)對組合得到的數(shù)據(jù)進(jìn)行填充,得到原始數(shù)據(jù),并將所述原始數(shù)據(jù)緩存在第三緩存區(qū); 步驟b:對一組字寄存器設(shè)置初始值; 步驟c :按照512個比特位對所述第三緩存區(qū)中的數(shù)據(jù)按進(jìn)行分段,并將偏移指針初始位置指向第一段數(shù)據(jù); 步驟d:根據(jù)所述原始數(shù)據(jù)的當(dāng)前段數(shù)據(jù)進(jìn)行消息擴(kuò)展,生成一組字?jǐn)?shù)據(jù); 步驟e:所述CPU對所述一組字寄存器中當(dāng)前數(shù)據(jù)及所述一組字?jǐn)?shù)據(jù)進(jìn)行處理,并用處理結(jié)果更新所述一組字寄存器中的數(shù)據(jù); 步驟f :判斷所述原始數(shù)據(jù)的當(dāng)前段數(shù)據(jù)是否為最后一段數(shù)據(jù),是則執(zhí)行步驟g,否則將偏移指針右移指向原始數(shù)據(jù)的下一段數(shù)據(jù),返回步驟d ; 步驟g:獲取所述一組字寄存器存儲的數(shù)據(jù),得到所述固定長度數(shù)據(jù)串。
30.如權(quán)利要求29所述的方法,其特征在于,所述根據(jù)組合得到的數(shù)據(jù)的比特位數(shù)對組合得到的數(shù)據(jù)進(jìn)行填充,具體包括用所述組合得到數(shù)據(jù)的比特位數(shù)作為填充數(shù)據(jù),填充得到的所述原始數(shù)據(jù)的比特位數(shù)為512的整數(shù)倍。
31.如權(quán)利要求30所述的方法,其特征在于,所述一組字寄存器可以為5個或8個字寄存器;當(dāng)所述一組字寄存器為5個時,所述步驟d中生成的所述一組字為79個字?jǐn)?shù)據(jù); 當(dāng)所述一組字寄存器為8個時,所述步驟d中生成的所述一組字為132個字?jǐn)?shù)據(jù)。
32.如權(quán)利要求31所述的方法,其特征在于,所述步驟d具體包括 將所述原始數(shù)據(jù)的當(dāng)前段數(shù)據(jù)每32位劃分為一個字?jǐn)?shù)據(jù),得到16個字?jǐn)?shù)據(jù),順序?qū)σ训玫降淖诌M(jìn)行異或和/或與運(yùn)算和/或模加運(yùn)算和/或移位得到所述一組字?jǐn)?shù)據(jù)。
33.如權(quán)利要求30所述的方法,其特征在于,所述步驟中CPU對所述一組字寄存器中當(dāng)前數(shù)據(jù)及所述一組字進(jìn)行處理具體為對一組字中不同字?jǐn)?shù)據(jù)及所述一組字寄存器中不同寄存器中的數(shù)據(jù)進(jìn)行異或運(yùn)算、與運(yùn)算、模加運(yùn)算、移位操作,并不斷用操作結(jié)果更新所述一組字寄存器中的數(shù)據(jù),直到歷遍所述一組字?jǐn)?shù)據(jù)中所有的字?jǐn)?shù)據(jù)。
34.一種在嵌入式系統(tǒng)中生成動態(tài)口令的裝置,其特征在于包括 檢測模塊用于檢測生成動態(tài)口令條件; 計時模塊用于在所述檢測模塊檢測到生成動態(tài)口令條件時,根據(jù)計時時間生成當(dāng)前動態(tài)值; 第一存儲模塊用于存儲第一預(yù)設(shè)值及靜態(tài)因子; 第一生成模塊用于根據(jù)當(dāng)前動態(tài)值和/或所述第一存儲模塊中的第一預(yù)設(shè)值生成尋址指針的值; 第一判斷模塊用于根據(jù)當(dāng)前動態(tài)值、所述第一預(yù)設(shè)值及所述尋址指針的值判斷是否需要生成固定長度的數(shù)據(jù)串; 第二生成模塊用于在所述第一判斷模塊判斷需要生成固定長度的數(shù)據(jù)串時,根據(jù)當(dāng)前動態(tài)值、所述第一預(yù)設(shè)值或所述尋址指針的值生成當(dāng)前動態(tài)因子;并根據(jù)當(dāng)前動態(tài)因子及所述第一存儲模塊存儲的所述靜態(tài)因子生成固定長度數(shù)據(jù)串; 第一緩存模塊用于存儲所述生成模塊生成的所述固定長度數(shù)據(jù)串; 尋址模塊用于對所述第一緩存模塊中存儲的所述固定長度數(shù)據(jù)串進(jìn)行劃分,并根據(jù)所述尋址指針的值尋找相應(yīng)的數(shù)據(jù)段; 輸出模塊用于將所述尋找模塊根據(jù)所述尋址指針的值尋找到的相應(yīng)的數(shù)據(jù)段作為動態(tài)口令輸出。
35.如權(quán)利要求34所述的裝置,其特征在于,所述計時模塊包括計數(shù)單元及計時單元, 所述計時單元用于計時,并在計時達(dá)到預(yù)設(shè)時間時清零重新開始計時; 所述計數(shù)單元用于當(dāng)所述計時單元計時達(dá)到所述預(yù)設(shè)時間時計數(shù)一次; 所述檢測模塊檢測到所述計時單元計時達(dá)到所述預(yù)設(shè)時間或檢測到所述計數(shù)單元計數(shù)一次時,即檢測到所述生成動態(tài)口令條件,所述計數(shù)單元還用于根據(jù)所述計時單元的計時時間生成當(dāng)前動態(tài)值。
36.如權(quán)利要求35所述的裝置,其特征在于,還包括按鍵輸入模塊,所述按鍵輸入模塊用于接收按鍵觸發(fā)生成動態(tài)口令生成指令,當(dāng)所述檢測模塊檢測到動態(tài)口令生成指令即檢測到所述生成動態(tài)口令預(yù)設(shè)條件。
全文摘要
本發(fā)明公開了一種在嵌入式系統(tǒng)中生成動態(tài)口令的方法及裝置,涉及身份認(rèn)證領(lǐng)域,該方法包括CPU檢測到生成動態(tài)口令的預(yù)設(shè)條件,根據(jù)計時器得到當(dāng)前動態(tài)值;生成尋址指針的值,并根據(jù)所述當(dāng)前動態(tài)值或所述尋址指針的值判斷是否需要生成固定長度數(shù)據(jù)串,是則生成當(dāng)前動態(tài)因子,并調(diào)用靜態(tài)因子,根據(jù)所述當(dāng)前動態(tài)因子和所述靜態(tài)因子生成所述固定長度數(shù)據(jù)串并存儲在第一存儲區(qū),根據(jù)所述尋址指針的值查找對應(yīng)的數(shù)據(jù)段作為動態(tài)口令輸出;否則直接根據(jù)所述尋址指針的值在第一存儲區(qū)中查找到對應(yīng)的數(shù)據(jù)段作為動態(tài)口令輸出。通過本發(fā)明方案減緩了動態(tài)口令的頻繁生成對硬件的損耗,且降低了生成動態(tài)口令的耗時。
文檔編號G06F21/00GK102750474SQ20121018210
公開日2012年10月24日 申請日期2012年6月4日 優(yōu)先權(quán)日2012年6月4日
發(fā)明者于華章, 陸舟 申請人:飛天誠信科技股份有限公司