本發明涉及計算機,尤其涉及一種基于確定有限狀態自動機的匹配方法及系統。
背景技術:
1、隨著計算機技術的不斷發展,為防止出現網絡安全事件,進行網絡安全檢測也顯得尤為重要。正則表達式作為一種匹配算法,由于其較強的靈活性、邏輯性和功能性,已逐漸成為網絡安全檢測中的關鍵技術。
2、目前,正則表達式匹配算法雖然能夠有效實現正則表達式匹配,但是,適用的場景存在較大程度的局限性,往往只用于小部分正則表達式語料片段的匹配,而在對大部分輸入語料的搜索匹配需要進行不斷的回溯操作,這將大大影響dfa(deterministic?finiteautomata,確定有限狀態自動機)的運行性能。
3、因此,亟需提供一種基于確定有限狀態自動機的匹配方法及系統來解決上述技術問題。
技術實現思路
1、本發明提供一種基于確定有限狀態自動機的匹配方法及系統,用以解決現有技術中需要進行不斷的回溯操作,dfa的運行性能差缺陷,實現提高dfa的運行性能。
2、本發明提供一種基于確定有限狀態自動機的匹配方法,包括:
3、獲取確定有限狀態自動機dfa的當前激活狀態值,以及當前讀取的輸入字符;
4、在所述dfa的狀態轉移掩碼表中,獲取所述輸入字符在不同狀態下的下一狀態信息,并根據所述輸入字符在不同狀態下的下一狀態信息,獲取所述輸入字符的掩碼值;所述dfa的狀態轉移掩碼表包括不同狀態在各字符下的下一狀態信息;
5、根據所述當前激活狀態值和所述輸入字符的掩碼值,執行所述dfa的狀態轉換操作,得到更新的激活狀態值;
6、對所述更新的激活狀態值進行狀態檢查,在檢查獲知所述更新的激活狀態值中不存在接受狀態字節的情況下,根據起始狀態編碼值,對所述更新的激活狀態值進行再次更新,得到新的當前激活狀態值,繼續基于所述新的當前激活狀態值進行所述輸入字符的掩碼值獲取、狀態轉換操作和狀態檢查,直到檢查獲知更新的激活狀態值中存在接受狀態字節,則確定所述輸入字符匹配成功。
7、根據本發明提供的一種基于確定有限狀態自動機的匹配方法,所述在檢查獲知所述更新的激活狀態值中不存在接受狀態字節的情況下,根據起始狀態編碼值,對所述更新的激活狀態值進行再次更新,得到新的當前激活狀態值,包括:
8、在檢查獲知所述更新的激活狀態值中不存在接受狀態字節的情況下,檢查所述更新的激活狀態值中是否存在起始狀態字節;
9、在檢查獲知所述更新的激活狀態值中存在起始狀態字節的情況下,在所述更新的激活狀態值中,查找第一字節;所述第一字節為值為0的多個狀態字節中的最低位置的字節;
10、根據所述起始狀態編碼值對所述第一字節的值進行更新,得到所述新的當前激活狀態值。
11、根據本發明提供的一種基于確定有限狀態自動機的匹配方法,在所述檢查所述更新的激活狀態值中是否存在起始狀態字節之后,所述方法還包括:
12、在檢查獲知所述更新的激活狀態值中不存在起始狀態字節的情況下,在所述更新的激活狀態值中,查找第二字節;所述第二字節為值重復的多個狀態字節中的最低位置的字節;
13、根據所述起始狀態編碼值對所述第二字節的值進行更新,得到所述新的當前激活狀態值。
14、根據本發明提供的一種基于確定有限狀態自動機的匹配方法,所述對所述更新的激活狀態值進行狀態檢查,包括:
15、將所述更新的激活狀態值與接受狀態掩碼值進行按位與操作;
16、對按位與操作結果和所述接受狀態掩碼值,執行逐字節的相等比較;
17、根據比較結果,確定所述更新的激活狀態值中是否存在接受狀態字節。
18、根據本發明提供的一種基于確定有限狀態自動機的匹配方法,所述根據所述當前激活狀態值和所述輸入字符的掩碼值,執行所述dfa的狀態轉換操作,得到更新的激活狀態值,包括:
19、將所述當前激活狀態值與初始化異或狀態掩碼值進行異或計算;
20、在異或計算結果中,獲取第三字節和第四字節;所述第三字節為最高位為0的字節,所述第四字節為最高位為1的字節;
21、以所述第三字節的目標低位值作為第一索引,在所述輸入字符的掩碼值中獲取目標掩碼字節,將所述目標掩碼字節的值保存至輸出向量的所述第一索引的對應位置;
22、將所述第四字節的目標低位值作為第二索引,將預設值保存至所述輸出向量的所述第二索引的對應位置;
23、根據所述輸出向量的各位置的值,獲取所述更新的激活狀態值。
24、根據本發明提供的一種基于確定有限狀態自動機的匹配方法,所述dfa的狀態轉移掩碼表是基于如下步驟構建的:
25、根據正則化表達式集合,構建語法樹;
26、根據所述語法樹,構建非確定有限狀態自動機nfa;
27、根據所述nfa,構建所述dfa的狀態轉移表;
28、對所述dfa的狀態轉移表進行轉置,得到所述dfa的狀態轉移掩碼表。
29、本發明還提供一種基于確定有限狀態自動機的匹配系統,包括:
30、第一獲取單元,用于獲取確定有限狀態自動機dfa的當前激活狀態值,以及當前讀取的輸入字符;
31、第二獲取單元,用于在所述dfa的狀態轉移掩碼表中,獲取所述輸入字符在不同狀態下的下一狀態信息,并根據所述輸入字符在不同狀態下的下一狀態信息,獲取所述輸入字符的掩碼值;所述dfa的狀態轉移掩碼表包括不同狀態在各字符下的下一狀態信息;
32、狀態轉換單元,用于根據所述當前激活狀態值和所述輸入字符的掩碼值,執行所述dfa的狀態轉換操作,得到更新的激活狀態值;
33、匹配單元,用于對所述更新的激活狀態值進行狀態檢查,在檢查獲知所述更新的激活狀態值中不存在接受狀態字節的情況下,根據起始狀態編碼值,對所述更新的激活狀態值進行再次更新,得到新的當前激活狀態值,繼續基于所述新的當前激活狀態值進行所述輸入字符的掩碼值獲取、狀態轉換操作和狀態檢查,直到檢查獲知更新的激活狀態值中存在接受狀態字節,則確定所述輸入字符匹配成功。
34、本發明還提供一種電子設備,包括存儲器、處理器及存儲在存儲器上并可在處理器上運行的計算機程序,所述處理器執行所述程序時實現如上述任一種所述基于確定有限狀態自動機的匹配方法。
35、本發明還提供一種非暫態計算機可讀存儲介質,其上存儲有計算機程序,該計算機程序被處理器執行時實現如上述任一種所述基于確定有限狀態自動機的匹配方法。
36、本發明還提供一種計算機程序產品,包括計算機程序,所述計算機程序被處理器執行時實現如上述任一種所述基于確定有限狀態自動機的匹配方法。
37、本發明提供的基于確定有限狀態自動機的匹配方法及系統,通過構建包括不同狀態在各字符下的下一狀態信息的dfa的狀態轉移掩碼表,并在dfa的狀態轉移掩碼表中,獲取輸入字符在不同狀態下的下一狀態信息,根據輸入字符在不同狀態下的下一狀態信息,獲取輸入字符的掩碼值,利用simd指令,依據獲取的當前激活狀態值和輸入字符的掩碼值進行狀態轉換操作,并在狀態轉換操作獲取的更新的激活狀態值中不存在接受狀態字節的情況下,根據起始狀態編碼值,對更新的激活狀態值進行再次更新,以迭代進行字符匹配,一方面高效及充分利用cpu?simd指令特性的dfa狀態編號(編碼)方式,不但減小了dfa運行時的內存開銷,同時由于dfa的狀態編號方式與simd指令特性緊密關聯,使得使用simd指令進行dfa的狀態轉移、狀態檢查等操作可進行多態并行執行,大大提升效率,另一方面,在dfa每讀入一個輸入字符進行狀態跳轉后都確保起始狀態處于激活狀態,避免了在對輸入語料進行搜索模式匹配的過程中dfa進行cpu開銷較大的回溯匹配,提高了運行效率,進而大大提升了dfa的運行性能。