加密錢包恢復指南

專注比特幣、以太坊等主流加密貨幣錢包的助記詞與密碼恢復,提供經驗證的方法、工具教學與資產安全預防指南。

MyEtherWallet 恢復腳本編寫教學:安全找回以太坊錢包地址

MyEtherWallet 恢復腳本編寫教學:安全找回以太坊錢包地址

本文僅供使用者在自己已備份助記詞、私鑰或 Keystore 的情況下,本地驗證錢包恢復結果。切勿從他人助記詞恢復或操作未經授權的資產。

一、先釐清:MEW 恢復腳本不是魔法鑰匙

MyEtherWallet 是常見以太坊錢包介面,它本身並不會替你保管助記詞或私鑰。所謂「恢復腳本」,本質上是利用以太坊通用的 HD 錢包標準,從你自己持有的資料派生出對應地址與私鑰。

真正能恢復錢包的關鍵資料通常包括:

  • 助記詞:12 或 24 個英文單字,對應 BIP39 標準。
  • 私鑰:64 位十六進字串,可直接控制錢包。
  • JSON Keystore:以密碼加密後的私鑰檔案。

因此,腳本的目標不是「破解錢包」,而是完成以下三件事:

  1. 本地派生地址,避免把助記詞貼到陌生網站。
  2. 驗證備份是否可用,確認助記詞與派生路徑正確。
  3. 建立可重複使用的安全流程,方便日後檢查錢包狀態。

二、準備工作與安全原則

必須準備的資料

  • 自己的 12 或 24 位助記詞。
  • 或自己的 私鑰。
  • 或自己的 JSON Keystore 檔案與解密密碼。
  • 電腦上已安裝 Node.js 或 Python。

安全原則

  1. 只在可信來源安裝套件,例如官方 npm 或 PyPI。
  2. 不要將助記詞寫入日誌,例如不要執行 console.log(mnemonic)。
  3. 盡量使用環境變數,避免直接硬編碼到程式碼中。
  4. 先在隔離環境測試,可先安裝在乾淨目錄或容器內。
  5. 不要上傳私鑰、助記詞或 Keystore。
  6. 只操作自己擁有權限的資產。

三、方案 A:用 Node.js 從助記詞派生錢包地址

這個方案使用 ethers 套件,從助記詞和本機派生路徑取得以太坊地址。它適合驗證「助記詞 + 路徑」是否能得到你在 MEW、MetaMask 或其他 HD 錢包中看到的地址。

安裝

mkdir mew-recovery && cd mew-recovery
npm init -y
npm install ethers

建立腳本

建立檔案 recover.mjs:

import { ethers } from 'ethers';

async function main() {
  const mnemonic = process.env.MEW_MNEMONIC;
  if (!mnemonic) {
    throw new Error('請先設定環境變數 MEW_MNEMONIC');
  }

  if (!ethers.Mnemonic.isValidMnemonic(mnemonic)) {
    throw new Error('助記詞格式無效,請檢查是否有多餘空格或錯誤單字');
  }

  const path = process.env.MEW_PATH || `m/44'/60'/0'/0/0`;

  const wallet = ethers.Wallet.fromPhrase(mnemonic, path);

  console.log('派生路徑:', path);
  console.log('錢包地址:', wallet.address);
}

main().catch((err) => {
  console.error('恢復失敗:', err.message);
});

執行方式

macOS、Linux 或 WSL 示例:

MEW_MNEMONIC='your mnemonic words here' MEW_PATH="m/44'/60'/0'/0/0" node recover.mjs

Windows PowerShell 示例:


![MyEtherWallet恢復腳本編寫教學](/asset/upload/19/821fa017dc0d293d4f9b3d6b38030f62_800_600.jpg)

$env:MEW_MNEMONIC='your mnemonic words here'
$env:MEW_PATH="m/44'/60'/0'/0/0"
node recover.mjs

建議:不要直接把助記詞寫在歷史指令中。可以改用互動式輸入或短生命週期的環境變數。

四、方案 B:用 Python 從助記詞、私鑰與 Keystore 驗證地址

Python 方案適合需要批次驗證、離線分析或與其他工具整合的讀者。這裡使用 bip-utils 處理 HD 派生,使用 eth-account 處理私鑰與 Keystore。

安裝

python -m venv .venv
source .venv/bin/activate
pip install bip-utils eth-account

建立腳本

建立檔案 recover.py:

import os
import json

from eth_account import Account
from bip_utils import Bip39SeedGenerator, Bip44, Bip44Coins


def recover_from_mnemonic():
    mnemonic = os.environ.get('MEW_MNEMONIC')
    if not mnemonic:
        raise ValueError('請設定環境變數 MEW_MNEMONIC')

    seed = Bip39SeedGenerator(mnemonic).Generate()
    path = os.environ.get('MEW_PATH', `m/44'/60'/0'/0/0`)

    address = (
        Bip44.FromSeed(seed, Bip44Coins.ETH)
        .DerivePath(path)
        .PublicKey()
        .ToAddress()
    )

    print('派生路徑:', path)
    print('助記詞地址:', address)


def recover_from_private_key():
    private_key = os.environ.get('MEW_PRIVATE_KEY')
    if not private_key:
        return

    address = Account.from_key(private_key).address
    print('私鑰地址:', address)


def recover_from_keystore():
    keystore_path = os.environ.get('MEW_KEYSTORE_PATH')
    keystore_password = os.environ.get('MEW_KEYSTORE_PASSWORD')

    if not keystore_path or not keystore_password:
        return

    with open(keystore_path, 'r', encoding='utf-8') as f:
        keystore_data = json.load(f)

    private_key = Account.decrypt(keystore_data, keystore_password)
    address = Account.from_key(private_key).address

    print('Keystore 地址:', address)


if __name__ == '__main__':
    if os.environ.get('MEW_MNEMONIC'):
        recover_from_mnemonic()

    recover_from_private_key()
    recover_from_keystore()

執行方式

export MEW_MNEMONIC='your mnemonic words here'
export MEW_PATH="m/44'/60'/0'/0/0"
python recover.py

![Keystore 解密](/asset/upload/19/2eb582a23a886f07ea18467a78f7f899_800_600.jpg)

五、方案 C:只從私鑰取得地址

如果你不依賴助記詞,而是直接擁有以太坊私鑰,可以透過私鑰還原錢包物件並取得地址。

import { ethers } from 'ethers';

async function main() {
  const privateKey = process.env.MEW_PRIVATE_KEY;
  if (!privateKey) {
    throw new Error('請先設定環境變數 MEW_PRIVATE_KEY');
  }

  const wallet = new ethers.Wallet(privateKey);
  console.log('私鑰對應地址:', wallet.address);
}

main().catch((err) => {
  console.error('失敗:', err.message);
});

執行:

MEW_PRIVATE_KEY='your private key' node recover.mjs

注意:私鑰的敏感度遠高於地址。任何能取得私鑰的人都能完全控制錢包。不要將私鑰複製到聊天工具、雲端筆記或未知瀏覽器外掛中。

六、派生路徑是什麼?為什麼同一組助記詞會產生不同地址

HD 錢包使用派生路徑來決定「從同一組種子中取哪一把鑰匙」。以太坊錢包常見路徑如下:

| 場景 | 常見路徑 | 說明 |
| --- | --- | --- |
| MetaMask、多數以太坊錢包預設 | m/44'/60'/0'/0/0 | 第一个账户 |
| 第二個账户 | m/44'/60'/0'/0/1 | 最後一段索引遞增 |
| Ledger 舊版路徑 | m/44'/60'/0' | 需搭配索引或工具處理 |
| 某些錢包或自訂 HD 錢包 | m/44'/60'/0'/0 | 可能表示账户層級 |

若你的地址與腳本輸出不同,常見原因包括:

  • 助記詞來源不同,例如 12 位與 24 位混用。
  • 派生路徑不同。
  • 錢包不是標準 BIP39 派生。
  • 使用了自定義地址或智慧合約錢包,而非外部擁有者錢包。
  • 助記詞包含隱藏密碼,例如 BIP39 passphrase。

七、驗證腳本是否真的有效

完成腳本後,建議用以下流程做交叉驗證:

  1. 取得腳本輸出的地址。
  2. 將地址貼到区块瀏覽器,例如 Etherscan,確認餘額與交易歷史是否符合記憶。
  3. 在離線或受控環境中比對地址,例如用你自己信任的錢包介面只讀查看。
  4. 記錄路徑,把成功地址對應的派生路徑寫到加密備份中,但不要記錄私鑰。
  5. 用小額測試,如果你要重新導入到新錢包,先轉入少量資產測試收款與操作。

八、常見錯誤與排查

1. 助記詞驗證失敗

可能原因:

  • 拼寫錯誤。
  • 單字順序錯誤。
  • 使用了中文或其他非英文助記詞格式。
  • 多餘空格、換行或標點符號。
  • 使用了不同語言版本助記詞,但沒有啟用對應處理方式。

排查方式:

  • 逐字檢查助記詞是否全部小寫。
  • 確認字數為 12、18、21 或 24 位。
  • 確認來自同一份原始備份。

2. 地址與原本 MEW 地址不同

可能原因:

  • 派生路徑不同。
  • 原始錢包使用了自定義路徑。
  • 原始錢包不是助記詞型 HD 錢包。
  • 原始錢包使用了額外 passphrase。

排查方式:

MEW 錢包恢復

  • 嘗試 m/44'/60'/0'/0/0、m/44'/60'/0'/0/1 等相鄰索引。
  • 若你曾有 MEW 備份提示,檢查是否使用了自定義派生路徑。
  • 若你使用 Ledger 或 Trezor,需參考該硬體錢包的文件或官方工具。

3. Keystore 解密失敗

可能原因:

  • 密碼錯誤。
  • Keystore 檔案遺失或版本不符。
  • 檔案在複製過程中損毀。

排查方式:

  • 確認密碼是否含前後空格。
  • 確認檔案是 JSON Keystore,而非其他匯出格式。
  • 使用原本產生 Keystore 的裝置或工具輔助驗證。

4. 私鑰格式錯誤

可能原因:

  • 不是 64 位十六進字串。
  • 缺少或多餘 0x。
  • 混入了位址而非私鑰。

正確格式通常是:

64 位十六進字串,或帶 0x 前綴的 66 字元字串

九、進階做法:建立一個只讀恢復工具

如果你只是想檢查備份,不必每次重新寫程式碼。可以建立一個小型 CLI 工具,讓使用者輸入助記詞或路徑後輸出地址。為降低風險,可以加入以下機制:

  • 不將助記詞寫入檔案。
  • 不將輸出寫入日誌。
  • 只輸出地址,不輸出私鑰。
  • 增加 checksum 或路徑列表驗證。
  • 使用離線電腦執行。

範例流程:

  1. 使用者設定環境變數。
  2. 腳本驗證助記詞格式。
  3. 腳本輸出多個派生路徑的地址。
  4. 使用者手動比對曾經持有的地址。
  5. 使用者確認備份有效後,清除環境變數並關閉終端機。

十、MEW 相關注意事項

MyEtherWallet 作為錢包介面,可能涉及以下情境:

  • 使用瀏覽器建立 HD 錢包並匯出 Keystore。
  • 使用助記詞從 MEW 介面產生地址。
  • 使用硬體錢包或 WalletConnect 方式操作。
  • 匯入先前備份的 keystore JSON。

如果你只是要驗證地址,建議使用本地腳本,而不是將敏感資料上傳到任何網頁。即使你信任某個網站,也應優先在離線或隔離環境完成助記詞恢復與地址派生。

十一、最佳實踐清單

建立備份時

  • 同時保存助記詞、派生路徑與地址。
  • 不要只保存地址而忽略助記詞。
  • 將備份放在防水、防塵、防篡改的位置。
  • 避免把助記詞拍照上傳雲端。

使用腳本時

  • 從官方套件庫安裝依賴。
  • 使用環境變數或記憶體中的輸入。
  • 避免把敏感資料寫入 shell history。
  • 執行後清除變數,例如 unset MEW_MNEMONIC。

驗證恢復時

  • 先確認地址是否正確。
  • 再確認餘額與交易歷史。
  • 最後才在小額環境測試簽名或轉帳。

十二、結語

MyEtherWallet 恢復腳本的核心,不是「找回 MEW」,而是找回你真正拥有的錢包控制權:助記詞、私鑰或 Keystore。只要備份完整,并使用標準的 BIP39、BIP44 與以太坊派生路徑,就可以在本機安全地派生地址並驗證備份。

最重要的一條原則是:任何腳本都不應為了方便而上傳或長期儲存你的助記詞、私鑰或 Keystore 密碼。真正可靠的恢復流程,應該在可信環境中完成派生、輸出地址、驗證狀態,然後清除敏感資料。