Python源碼中明文賬密的掃描、攔截與加密處理實(shí)例代碼
概要
由于Python是一種解釋型語言,一般以*.py的方式發(fā)布、運(yùn)行,源碼容易被查看和修改,尤其是涉及鑒權(quán)相關(guān)的信息,不小心泄露出去就會造成信息安全風(fēng)險?;谝延械膶?shí)踐經(jīng)驗(yàn),本文主要介紹:
- Python項目中存量明文賬號/密碼的掃描;
- Patch級敏感信息CI/CD攔截策略;
- Python敏感模塊的加密處理方法;
上述三個問題,總結(jié)實(shí)踐經(jīng)驗(yàn),記錄于此,為有需要的同學(xué)提供參考。
存量敏感信息的掃描
存量敏感信息一般分為兩類:1、明文賬號密碼;2、明文Token。在Python中一般都是以字符串的形式明文寫在代碼里,相較于前者,后者一般長度更長、信息熵更高。在大型的Python項目中,一般是多人協(xié)同開發(fā),如果明文提交到git倉庫,或者直接部署在生產(chǎn)環(huán)境,會導(dǎo)致系統(tǒng)安全問題且不利于系統(tǒng)維護(hù)。下面提供兩種開源的方案(Gitleaks 和 TruffleHog),來掃描存量的明文賬密/Token。
參考文檔:
https://github.com/gitleaks/gitleaks
https://zhuanlan.zhihu.com/p/672246664
https://blog.csdn.net/gitblog_00008/article/details/137004093
https://github.com/trufflesecurity/truffleHog
https://www.anquanke.com/post/id/281052#h2-0
Gitleaks
Gitleaks是一個開源的Git倉庫敏感信息掃描工具,非常適合用來檢測git倉庫中提交的硬編碼密碼、API Token等,其最大的特點(diǎn)是:
- 與主流的git、github、gitee、gerrit、gitlab等VCS管理系統(tǒng)兼容較好,支持by Patch掃描,并能過濾出對應(yīng)的Patch owner,便于定責(zé)整改;
- 支持普通文件夾掃描,掃描結(jié)果支持導(dǎo)出為json/csv文件;
- 官方集成了主流Token(aliyun、aws、google、facebook、rsa私鑰等)的掃描規(guī)則,可以直接拿來用,也支持自定義掃描規(guī)則(傳入正則表達(dá)式);
- 支持基線掃描;
官方提供了幾大主流平臺的二進(jìn)制文件,可以直接下載使用,也開源了Go源碼,有條件的也可以編譯使用。
在使用時是可以通過分析存量明文賬密/Token的coding規(guī)律,提煉出一個通用的正則表達(dá)式,然后掃描整個倉庫,導(dǎo)出明文密碼列表。
如不便從官方渠道(Github)下載,文末提供已經(jīng)下載好的二進(jìn)制文件,供有需要的兄弟拿去用。
下面提供一個使用示例:
- by Patch掃描,輸出信息攜帶Patch Owner,導(dǎo)出為json文件
–source::為git倉庫路徑
–report-path:為導(dǎo)出的敏感文件路徑
–log-opts=“–since=7.days.ago”,僅分析最近7天的commit diff
gitleaks detect --source=. \
--log-opts="--since=7.days.ago" \
--report-format=json \
--report-path=leaks_report.json
- 掃描普通目錄,導(dǎo)出為csv報告
注意:按照非git方式掃描,無法讀取author信息
gitleaks detect --source="C:/my-project" \
--report-format=csv \
--report-path="secrets_report.csv" \
--verbose
- 指定自定義規(guī)則
注意:–config選項不傳參數(shù)時,默認(rèn)會啟用常見服務(wù)的檢測規(guī)則(如 AWS Access Key、Google API Key、Aliyun Secret、SSH Private Key 等)。
假設(shè)自定義掃描規(guī)則的文件內(nèi)容如下:
title = "Custom Gitleaks Config"
[[rules]]
id = "aliyun-access-key-custom"
description = "Detect Aliyun Access Key"
regex = '''(LTAI[0-9a-zA-Z]{20})'''
secretGroup = 1
entropy = 3.0
keywords = ["LTAI"]
[[rules]]
id = "private-key-custom"
description = "Detect RSA/DSA Private Key"
regex = '''-----BEGIN (RSA|DSA|EC) PRIVATE KEY-----'''
keywords = ["BEGIN PRIVATE KEY"]
自定義掃描規(guī)則保存到toml文件中,
gitleaks detect --source=. \
--config=custom-config.toml \
--report-path=custom_rules_report.json
- 指定基線掃描,比較適合用在大型項目的檢測邏輯中
# 先生成基線文件
gitleaks detect --source=. \
--report-format=json \
--report-path=baseline.json
# 后續(xù)掃描時基于該基線,只掃描增量的新漏洞即可
gitleaks detect --source=. \
--baseline-path=baseline.json \
--report-path=new_leaks.json
掃描出來的json文件效果:

TruffleHog
TruffleHog是一個開源的Python項目,功能與Gitleaks類似,主要特點(diǎn)或相對的gitleaks的區(qū)別是:
- 可以直接pip安裝使用,需要注意的是,如果Python版本過低,pip安裝TruffleHog可能存在版本兼容性問題,不推薦使用,更推薦直接用編譯好的二進(jìn)制文件做檢查;
- 基于“熵值 + 正則”識別潛在密鑰,并支持主動驗(yàn)證(verification) 是否真實(shí)有效(如調(diào)用 API 測試 key 是否可用);
- 強(qiáng)大的誤報過濾能力:通過網(wǎng)絡(luò)請求驗(yàn)證發(fā)現(xiàn)的密鑰是否“可被使用”,大幅降低誤報率;
- 與Gitleaks類似,它也支持通過配置文件添加自定義 detector(需 protobuf ID 或名稱),但不如 Gitleaks 的 TOML 規(guī)則直觀,例如設(shè)置最小的匹配長度,忽略特定的文件/目錄;
- TruffleHog更適合DevOps系統(tǒng),能直接接入到CI/CD業(yè)務(wù)流,非常適合Patch級的檢查;
相對于Gitleaks,TruffleHog更適合集成到CI/CD系統(tǒng)中,做增量式的敏感信息檢查,但是存量的明文賬密檢查,從使用效果上來看,gitleaks更勝一籌。不過需要注意的是:有些基于Gerrit的VCS,在每筆Patch中會打上Change-ID,此時這種hash字符串,也會被TruffleHog檢測出來,因此需要維護(hù)一個特定的白名單,避免檢測誤報。
下面提供一個簡單的使用示例:
掃描本地項目目錄中的敏感信息:
trufflehog filesystem ./my-project \
--json \
--only-verified
輸出效果:
{
"SourceMetadata": {
"data": { "File": "deploy.sh", "Line": 10 },
"encoding": "plain"
},
"DetectorName": "AWS",
"Verified": true,
"Raw": "AKIAIOSFODNN7EXAMPLE",
"Redacted": "AKIAIOSFODNN7EXXX",
"ExtraData": {"email": ""}
}
CI/CD前置攔截
存量的密碼掃描只能解決歷史遺留的漏洞,實(shí)際在項目開發(fā)中,治理完存量的硬編碼鑒權(quán)信息,一般需要在Patch合入遠(yuǎn)程倉庫前,在CI/CD流程中提前攔截,未雨綢繆。這里也提供下面兩個思路。
傳統(tǒng)掃描策略
傳統(tǒng)的掃描策略是指,掃描Patch中所有的文本文件,借助開源工具或自定義的掃描規(guī)則攔截高信息熵字段和潛在的硬編碼字符。這種攔截方式能直接借助上述的開源工具的能力來實(shí)施,但是缺陷也是很明顯,這種攔截機(jī)制比較“死板”,如果有人特地提交了不能被正則表達(dá)式匹配到的明文賬密(例如,把password 變量名全部改成candy,正則表達(dá)式就匹配不到password相關(guān)的字段),此時就會漏檢。即這種攔截規(guī)則不能智能化地“進(jìn)化”,需要定期維護(hù)攔截規(guī)則。
下面提供一份Gitleaks+TruffleHog協(xié)同部署在DevOps系統(tǒng)的業(yè)務(wù)流:

AI大模型攔截策略
在自然語言處理(NLP)領(lǐng)域,大型語言模型(Large Language Models, LLMs)經(jīng)過多年的發(fā)展與優(yōu)化,已在文本理解、語義分析和敏感信息識別等方面展現(xiàn)出高度的成熟性與可靠性。隨著企業(yè)對代碼安全、數(shù)據(jù)合規(guī)及隱私保護(hù)要求的不斷提升,傳統(tǒng)的基于規(guī)則或正則表達(dá)式的敏感信息檢測手段在面對復(fù)雜上下文、模糊命名模式或非標(biāo)準(zhǔn)格式時逐漸顯現(xiàn)出局限性。因此,引入AI能力輔助進(jìn)行增量式敏感信息檢測,尤其是針對明文賬號密碼等高風(fēng)險內(nèi)容的識別,已成為一種具有前瞻性和實(shí)用價值的技術(shù)路徑。
相較于依賴公開云服務(wù)的大模型應(yīng)用,私有化部署的AI大模型更適用于此類安全敏感場景。原因在于:其一,私有部署可有效避免源代碼、配置文件等內(nèi)容上傳至第三方平臺所帶來的數(shù)據(jù)泄露風(fēng)險;其二,企業(yè)可在受控環(huán)境中對模型進(jìn)行定制化微調(diào),使其更精準(zhǔn)地適應(yīng)內(nèi)部命名規(guī)范、技術(shù)棧特征和業(yè)務(wù)語境,從而提升檢測準(zhǔn)確率;其三,私有模型支持離線運(yùn)行,滿足金融、政務(wù)、能源等高合規(guī)要求行業(yè)的監(jiān)管需求。
值得注意的是,大模型輸出通常具有一定的開放性和不確定性,若僅以“是否存在賬密”作為自由回答,可能導(dǎo)致結(jié)果難以結(jié)構(gòu)化處理,影響后續(xù)自動化流程的判斷。為此,在調(diào)用AI接口時,應(yīng)通過精心設(shè)計的提示詞工程(Prompt Engineering) 顯式約束輸出格式。推薦方式包括:要求模型返回分類級別判定(如“高/中/低”風(fēng)險),或提供概率化評分(如“95% 可能包含明文密碼”),以便集成系統(tǒng)依據(jù)預(yù)設(shè)閾值做出攔截、告警或放行決策。
示例:標(biāo)準(zhǔn)化AI調(diào)用請求與響應(yīng)
請求 Prompt:
請分析以下代碼片段,判斷其中是否可能包含明文賬號或密碼信息。請僅回答一個JSON對象,字段為
risk_level(取值:“high”, “medium”, “low”)和confidence_score(0.0~1.0之間的浮點(diǎn)數(shù))。不要解釋。db.connect("jdbc:mysql://localhost:3306/prod", "admin", "P@ssw0rd!2024")
AI 模型返回:
{
"risk_level": "high",
"confidence_score": 0.98
}
該結(jié)構(gòu)化輸出可被CI/CD流水線直接解析,觸發(fā)高風(fēng)險阻斷策略,實(shí)現(xiàn)與DevOps流程的無縫集成。綜上所述,結(jié)合私有化大模型與規(guī)范化輸出機(jī)制,能夠構(gòu)建更加智能、安全且可操作的敏感信息防控體系。
明文密碼加密處理
明文密碼加密處理一般有兩種:
- 把Python腳本編譯成二進(jìn)制文件(例如 pyinstaller/cython 等);
- 使用Python源碼混淆/加密工具(例如 pyarmor/pyminifier 等);
Python腳本編譯成二進(jìn)制
pyinstaller和cython都能生成“不可讀”的產(chǎn)物,二者均可跨平臺使用,且打包/編譯后可以隱藏源碼發(fā)布,但其設(shè)計目標(biāo)、實(shí)現(xiàn)機(jī)制和適用場景有明顯區(qū)別,對比如下:
| 特性 | PyInstaller | Cython |
|---|---|---|
| 主要使用場景 | 打包整個Python應(yīng)用為獨(dú)立的可執(zhí)行文件 | 將Python代碼編譯為C擴(kuò)展模塊(.so/.pyd) |
| 能否支持模塊化導(dǎo)入 | 否,無法被其他Python腳本 import | 是,可以作為獨(dú)立的module被import |
| 性能提升 | 否,微乎其微,打包產(chǎn)物較臃腫 | 打包產(chǎn)物精簡,運(yùn)行性能接近C級別 |
總的來說,PyInstaller適合發(fā)布一個“黑盒應(yīng)用”,與其功能類似的其他第三方模塊還有 cx_Freeze/py2exe/py2app/Nuitka等,這些或多或少能彌補(bǔ)PyInstaller打包產(chǎn)物過于笨重的問題。相對PyInstaller,這里更推薦使用Cython將包含秘鑰、核心算法的敏感源碼轉(zhuǎn)換為C并編譯成原生模塊來使用。下面提供一個Cython的使用示例:
創(chuàng)建一個包含敏感信息的模塊:
# _crypto.pyx
def decrypt_data(char[:] encrypted_data):
# 模擬解密邏輯(實(shí)際可用 AES 等)
result = ""
for c in encrypted_data:
result += chr(c ^ 42)
return result
編寫setup.py:
# setup.py
from setuptools import setup
from Cython.Build import cythonize
setup(
ext_modules = cythonize("_crypto.pyx", compiler_directives={'language_level': "3"})
)
編譯 python setup.py build_ext --inplace
生成 _crypto.cpython-xxx.so或 _crypto.pyd,在其他模塊中如果想使用此模塊,直接import即可,如:
from _crypto import decrypt_data plain_text = decrypt_data(b'encrypted_data')
發(fā)布時只需發(fā)布.so/.pyd即可實(shí)現(xiàn)安全調(diào)用的效果。
當(dāng)然也可以將PyInstaller和Cython結(jié)合使用:
[普通模塊] → import → [Cython 加密模塊] → 打包 → [PyInstaller 可執(zhí)行文件]
Python源碼混淆/加密(pyarmor/pyminifier)
pyarmor
pyarmor 是目前 Python 領(lǐng)域中最成熟、功能最全面的源碼保護(hù)工具之一。它不僅僅是一個“混淆器”,更是一套完整的代碼加密 + 運(yùn)行時保護(hù) + 授權(quán)控制體系。其原理是將 .py 文件編譯為加密的字節(jié)碼,并生成一個運(yùn)行時解密的包裝層。真正的邏輯只有在運(yùn)行時才會被動態(tài)還原,且原始代碼不會以明文形式存在于磁盤上。主要特點(diǎn):
- 支持函數(shù)級、模塊機(jī)代碼加密;
- 可綁定機(jī)器碼(License控制),防止非法復(fù)制;
- 支持打包后的腳本防調(diào)試、防反編譯;
pyarmor 的基礎(chǔ)混淆和加密功能是免費(fèi)的,可以通過 pip install pyarmor-core 安裝使用,但是平臺授權(quán)、動態(tài)許可證、更強(qiáng)的混淆策略則需要購買商業(yè)版本。
使用方法:pyarmor obfuscate --output dist/ myscript.py,生成的 dist/ 目錄中包含加密后的腳本和運(yùn)行所需的 pyarmor_runtime,部署時需一并發(fā)布。
相比 pyarmor 的“重裝防護(hù)”,pyminifier 更像是一個“代碼美化反向操作工具”。它的主要目標(biāo)不是安全加密,而是通過壓縮、重命名、刪除注釋等方式讓代碼變得難以閱讀。主要特點(diǎn):
- 刪除空格、注釋、文檔字符串;
- 將變量名、函數(shù)名替換為單個字母(如 a, b, c);
- 支持簡單的控制流扁平化(需配合其他庫);
- 純 Python 實(shí)現(xiàn),安裝簡單;
pyminifier
pyminifier完全開源免費(fèi),可直接pip install pyminifier安裝,比較適合以下情況:
- 對安全性要求不高,僅希望“不讓別人一眼看懂”代碼
- 用于小型腳本、自動化工具的簡易保護(hù)
- 作為 CI/CD 流程中的輕量混淆步驟
需要注意的是,pyminifier 生成的代碼仍然是標(biāo)準(zhǔn) Python,只要有經(jīng)驗(yàn)的人稍加分析就能還原邏輯,因此不能用于高安全場景。
除了 pyarmor 和 pyminifier,還有一些工具也提供了不同程度的代碼保護(hù)能力,列出其核心功能供參考:
- dummy_py:通過插入無意義代碼、改變控制流結(jié)構(gòu)來增加反編譯難度,屬于“干擾型”混淆。
- python-obfuscator:一款新興的混淆工具,支持變量重命名、字符串加密、代碼打亂等功能,界面友好,適合初學(xué)
- BytecodeAssembler:直接操作字節(jié)碼層面的工具,技術(shù)門檻高,但防護(hù)更強(qiáng),常用于研究或高級定制場景。
總結(jié)
本文簡單介紹了Python中明文賬密的掃描、攔截和加密方法,旨在解決Python項目開發(fā)過程中的信息安全、規(guī)范性問題。如果追求的是真正意義上的代碼保護(hù),尤其是要交付給外部客戶或涉及商業(yè)機(jī)密,那么 pyarmor 是首選。如果只是想做一個“看得不太清楚”的版本,比如用于內(nèi)部小工具防窺探,或者想減少腳本體積,那 pyminifier 就足夠了,而且免費(fèi)、輕便、易集成。對于極高敏感邏輯,建議結(jié)合 Cython 編譯核心模塊 + pyarmor 加密部署 + 服務(wù)器端驗(yàn)證 的多重策略,才能構(gòu)建真正可靠的防護(hù)體系。
到此這篇關(guān)于Python源碼中明文賬密的掃描、攔截與加密處理的文章就介紹到這了,更多相關(guān)Python源碼明文賬密處理內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Python自動化辦公之Excel數(shù)據(jù)的寫入
這篇文章主要為大家詳細(xì)介紹一下Python中excel的寫入模塊- xlsxwriter,并利用該模塊實(shí)現(xiàn)Excel數(shù)據(jù)的寫入,感興趣的小伙伴可以了解一下2022-05-05
Python 中開發(fā)pattern的string模板(template) 實(shí)例詳解
這篇文章主要介紹了Python 中開發(fā)pattern的string模板(template) 實(shí)例詳解的相關(guān)資料,需要的朋友可以參考下2017-04-04
用django-allauth實(shí)現(xiàn)第三方登錄的示例代碼
這篇文章主要介紹了用django-allauth實(shí)現(xiàn)第三方登錄的示例代碼,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2019-06-06
Python處理JSON保持字段順序的實(shí)現(xiàn)方案
文章詳細(xì)介紹了在Python中處理JSON時保持字段順序的方法,包括JSON規(guī)范、Python版本的變化、常見方案和最佳實(shí)踐,需要的朋友可以參考下2026-03-03
python實(shí)現(xiàn)簡單的井字棋游戲(gui界面)
這篇文章主要介紹了python如何實(shí)現(xiàn)簡單的井字棋游戲,幫助大家更好的理解和使用python,感興趣的朋友可以了解下2021-01-01

