Skip to main content

string_analyze/rules/core/
apikey_ai.rs

1use crate::rules::lazy_rule;
2
3// 1. Anthropic (Claude)
4lazy_rule!(
5    RE_ANTHROPIC_KEY = r#"\bsk-ant-(?:api03|oat01)-[A-Za-z0-9_-]{80,}\b"#,
6    "发现 Anthropic (Claude) API Key",
7    95
8);
9
10// 2. OpenRouter
11lazy_rule!(
12    RE_OPENROUTER_KEY = r#"\bsk-or-v1-[a-f0-9]{64}\b"#,
13    "发现 OpenRouter API Key",
14    90
15);
16
17// 3. Groq
18lazy_rule!(
19    RE_GROQ_KEY = r#"\bgsk_[A-Za-z0-9]{48,64}\b"#,
20    "发现 Groq API Key",
21    95
22);
23
24// 4. Hugging Face
25lazy_rule!(
26    RE_HUGGINGFACE_KEY = r#"\bhf_[A-Za-z0-9]{30,50}\b"#,
27    "发现 Hugging Face Token",
28    90
29);
30
31// 5. Perplexity
32lazy_rule!(
33    RE_PERPLEXITY_KEY = r#"\bpplx-[A-Za-z0-9]{40,60}\b"#,
34    "发现 Perplexity API Key",
35    90
36);
37
38// 6. NVIDIA NIM
39lazy_rule!(
40    RE_NVIDIA_NIM_KEY = r#"\bnvapi-[A-Za-z0-9_-]{60,80}\b"#,
41    "发现 NVIDIA NIM API Key",
42    90
43);
44
45// 7. xAI (Grok) - 同时支持官方 xai- 和旧版 xai-token-
46lazy_rule!(
47    RE_XAI_KEY = r#"\b(?:xai-token-|xai-)[A-Za-z0-9_-]{40,120}\b"#,
48    "发现 xAI (Grok) API Key",
49    90
50);
51
52// 8. Google Gemini / PaLM
53lazy_rule!(
54    RE_GEMINI_KEY = r#"\bAIzaSy[A-Za-z0-9_-]{33}\b"#,
55    "发现 Google Gemini API Key",
56    90
57);
58
59lazy_rule!(
60    RE_OPENAI_KEY = r#"\bsk-(?:proj-|svcacct-|admin-)?[A-Za-z0-9_]{20,120}\b"#,
61    "发现 OpenAI API Key",
62    88,
63    |slice, _input| {
64        if slice.starts_with("sk-or-v1-") {
65            return false;
66        } // OpenRouter
67        if slice.starts_with("sk-ant-") {
68            return false;
69        } // Anthropic
70
71        if slice.len() == 35 && slice[3..].chars().all(|c| c.is_ascii_hexdigit()) {
72            return false;
73        }
74
75        if (40..=64).contains(&(slice.len() - 3))
76            && slice[3..]
77                .chars()
78                .all(|c| c.is_ascii_lowercase() || c.is_ascii_digit())
79        {
80            return false;
81        }
82
83        true
84    }
85);
86
87// 10. DeepSeek
88lazy_rule!(
89    RE_DEEPSEEK_KEY = r#"\bsk-[a-f0-9]{32}\b"#,
90    "发现 DeepSeek API Key",
91    85
92);
93
94// 11. SiliconFlow
95lazy_rule!(
96    RE_SILICONFLOW_KEY = r#"\bsk-[a-z0-9]{40,64}\b"#,
97    "发现 SiliconFlow API Key",
98    80
99);
100
101// 12. ElevenLabs
102lazy_rule!(
103    RE_ELEVENLABS_KEY = r#"\bsk_[a-f0-9]{48}\b"#,
104    "发现 ElevenLabs API Key",
105    75
106);
107
108// 13. Cerebras
109lazy_rule!(
110    RE_CEREBRAS_KEY = r#"\bcsk-[a-z0-9]{40,60}\b"#,
111    "发现 Cerebras API Key",
112    85
113);
114
115#[cfg(test)]
116mod tests {
117    use crate::analyze_with;
118    use crate::rules::get_rules;
119
120    #[test]
121    fn test() {
122        let input = r#"
123flag{5tgb8uik,0ol}
124deepseek_key = "sk-514d49dd9cd9111111b23a9b9fffffff";
125siliconflow_key: sk-senitvfaimsnaxkhkhuskuekhbigijnpvtfcxqxiuaaaaaaa
126xai_key = xai-token-saYrl4NtQZQ1nLBmFQUAHSwrDR0L4ZCg6kEafTrRsCkz4ZEjyfEkcGpwy2NXcSWQ9Z7KxaAAAAAAAAAA
127xai_official = xai-xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx
128sk-or-v1-514d49dd9cd9111111b23a9b9fffffff514d49dd9cd9111111b23a9b9fffffff # openrouter
129openai_key = sk-proj-abcdefghijklmnopqrstuvwxyz1234567890ABCDEF
130anthropic_key = sk-ant-api03-AAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAA
131groq_key = gsk_abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWX
132hf_token = hf_abcdefghijklmnopqrstuvwxyzABCDEFGHIJ
133pplx_key = pplx-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOP
134gemini_key = AIzaSyabcdefghijklmnopqrstuvwxyz1234567
135nvapi_key = nvapi-abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ1234567890
136"#;
137        for line in input.lines() {
138            println!(
139                "{:#}",
140                analyze_with(
141                    line,
142                    &get_rules(|m, _| module_path!().split("::tests").any(|s| s == m)),
143                )
144            )
145        }
146    }
147}