自製OmniWallet密碼組合生成器:從部分記憶到安全恢復錢包的完整指南

安全與法律提醒:本文僅供恢復「你本人擁有」的錢包。請在離線環境操作,切勿嘗試未授權存取他人資產。任何恢復工具都應從可信來源取得,並先在隔離環境測試。
為什麼要自製密碼組合生成器?
當你忘記 OmniWallet 密碼時,若還記得部分片段,例如「omni + 生日 + 符號」,就可以用生成器有系統地產生候選密碼清單。這不是破解加密演算法,而是把模糊記憶轉成可驗證的候選集合,再交給離線驗證流程逐一測試。相較於線上工具,自製腳本能完全控制資料外洩風險,也能依照你的記憶規則調整組合。
OmniWallet 密碼恢復的基本觀念
OmniWallet 是基於 Omni Layer 的比特幣錢包服務。不同版本與備份格式,密碼可能用於:
- 解密匯出的加密私鑰或錢包 JSON
- 登入網頁錢包的錢包識別碼與密碼
- 加密本地瀏覽器儲存的敏感資料
請先確認你手上是否有以下任一項:
- 加密錢包備份檔(JSON、文字檔、瀏覽器設定檔)
- 私鑰 WIF 或種子短語(若沒有加密,就不需要密碼恢復)
- 網頁錢包登入資訊與密碼提示
若只有助記詞,請先確認是否為 BIP39 標準;若是 BIP39,恢復流程會偏向助記詞校驗與字典推理,而不是單純密碼組合。若你的 OmniWallet 資產由密碼加密私鑰保護,才進入以下密碼候選生成流程。
恢復前準備:離線、備份、驗證環境
- 建立乾淨的離線電腦:使用 Linux Live USB,拔除網路線、關閉 Wi-Fi。
- 備份原始檔案:對錢包備份、JSON、瀏覽器設定檔做多份唯讀副本。
- 安裝必要工具:Python 3、btcrecover、HashCat(視格式而定)。所有工具先驗證雜湊值。
- 準備驗證腳本:能在本地讀取加密錢包並嘗試解密,且不會把密碼或私鑰寫入日誌。
- 設定終止條件:例如找到正確密碼後立即停止,並將資產轉移到新錢包。
自製生成器的設計思路
一個好的密碼組合生成器應包含以下模組:
1. 收集已知片段
列出你記得的關鍵字:名字、寵物、公司、錢包名稱、日期、年份、電話後四碼、常用數字、鍵盤樣式(qwerty、asdf)、特殊符號。
2. 建立變體字典
對每個片段產生:

- 全小寫、全大寫、首字大寫
- Leet 替換:a→4、e→3、i→1、o→0、s→5、t→7
- 前後加符號:!、@、#、$、_、-
- 加入年份:2015 到 2025
- 常見後綴:123、1234、888、007、生日
3. 組合規則
常見策略:
- 固定片段 + 可變片段 + 年份 + 符號
- 兩到三個片段排列組合
- 使用分隔符:無、_、-、.、@
- 控制重複次數,避免候選清單爆炸
4. 優先級排序
先測試最可能的組合:包含完整單詞、正確大小寫、合理年份。不要一開始就產生十億筆資料。
5. 輸出候選清單
每行一個密碼,UTF-8 編碼。可以依規則分檔,例如 high_priority.txt、medium.txt、full.txt。
Python 範例:簡易候選密碼生成器
以下程式碼僅產生候選密碼,不會連網、不會破解他人錢包。請依你的記憶調整 fragments、years、seps 與 suffixes,並控制組合數量。
import itertools
fragments = ['omni', 'wallet', 'btc', 'satoshi', 'alice', '2017']
years = ['2015', '2016', '2017', '2018', '2019', '2020', '2021', '2022', '2023', '2024', '2025']
seps = ['', '_', '-', '.', '@', '#']
suffixes = ['', '!', '!!', '123', '1234', '007', '888']
leet_map = {'a': '4', 'e': '3', 'i': '1', 'o': '0', 's': '5', 't': '7'}
def leet_variants(word):
variants = {word}
for i, ch in enumerate(word.lower()):

if ch in leet_map:
new_word = word[:i] + leet_map[ch] + word[i+1:]
variants.add(new_word)
return variants
def build_words(fragments):
words = set()
for w in fragments:
words.add(w)
words.add(w.lower())
words.add(w.upper())
words.add(w.capitalize())
words.update(leet_variants(w))
return words
def generate_passwords(words):
candidates = set()
for r in range(1, 4):
for combo in itertools.product(words, repeat=r):
for sep in seps:
joined = sep.join(combo)
for y in years:
for suf in suffixes:
candidates.add(joined + y + suf)
candidates.add(y + joined + suf)
return candidates
if __name__ == '__main__':
words = build_words(fragments)
passwords = generate_passwords(words)
with open('omni_candidates.txt', 'w', encoding='utf-8') as f:
for pwd in sorted(passwords):
print(pwd, file=f)
print('Total candidates:', len(passwords))

若候選數量過大,請先將 range(1, 4) 改為 range(1, 3),或只保留高機率片段。
如何與 OmniWallet 驗證流程整合
自製生成器只負責產生密碼,還需要一個離線驗證器。你可以:
- 使用 OmniWallet 官方或開源客戶端的解密函式,讀取你的加密備份並嘗試解密。
- 若格式與 BitcoinJS/bitcore 相容,可撰寫 Node.js 或 Python 驗證腳本。
- 若使用 btcrecover,可將候選清單轉成 tokenlist 或自訂密碼檔,再讓 btcrecover 測試支援的錢包格式。
- 若使用 HashCat,先確認你的加密錢包格式是否有對應 mode;沒有對應 mode 時,不要強行轉換,以免浪費時間。
驗證時務必:
- 全程離線
- 關閉 shell history 或使用不留痕環境
- 找到密碼後立即停止
- 將資產轉移到新建立且安全備份的錢包
常見錯誤與排查
- 忽略大小寫與鍵盤佈局:例如中文輸入法、Caps Lock、數字鍵盤。
- 忘記空白或標點:有些密碼包含尾隨空格。
- 用錯備份檔:舊版與新版錢包格式可能不同。
- 候選清單太大:先產生高優先級檔案,再逐步擴大。
- 在線上驗證:這會暴露錢包檔案與密碼,極度危險。
- 沒有先備份:任何操作前都應保留原始檔案的唯讀副本。
預防勝於恢復:避免再次丟失
- 使用密碼管理器保存高強度密碼,並搭配實體備份。
- 將助記詞分片存儲,放在不同安全地點。
- 定期測試恢復流程,確保備份可用。
- 大額資產使用硬體錢包與多重簽名方案。
- 不要把密碼與助記詞存放在同一位置。
結語
自製 OmniWallet 密碼組合生成器,能把零散的記憶轉化為可管理的候選清單,是密碼恢復流程中的實用環節。關鍵在於離線操作、控制候選規模、使用可信驗證工具,並且只針對自己擁有的錢包進行恢復。若你需要更多關於 BIP39/BIP32、btcrecover、HashCat、Pywallet 與硬體錢包備份的教學,歡迎訪問「加密錢包恢復指南」,取得從基礎排查到高級腳本恢復的完整方案。