Go-Ethereum

如何生成私鑰、公鑰和地址

  • January 23, 2019

除了this之外,我在網上找不到任何關於在 Javascript 中執行此操作的文件。

我想知道身份驗證在乙太坊 dApp 中是如何工作的。根據我的理解,使用者種子以某種方式生成為私鑰,然後使用該私鑰派生公鑰並從中派生地址。有關如何使用 javascript 實現這一點或這種設置的架構是什麼的任何進一步資訊.. 對理解它的任何幫助都會很棒。

我知道如何使用 js bip39 庫生成助記詞等,之後我有點卡住了。

到目前為止,這基本上是我正在嘗試的:

   const mnemonic = "vacant element sleep harsh stick else salt great kitten clutch salad subway"
   const privateKey = new Buffer( mnemonic )
   const publicKey = ethUtil.privateToPublic(privateKey).toString('hex')
   const address = ethUtil.privateToAddress(privateKey).toString('hex')

我已從HD Wallet Provider中提取此程式碼

const bip39 = require('bip39');
const hdkey = require('ethereumjs-wallet/hdkey');

const mnemonic = '..';
const hdwallet = hdkey.fromMasterSeed(bip39.mnemonicToSeed(mnemonic));
const path = "m/44'/60'/0'/0/0";
const wallet = hdwallet.derivePath(path).getWallet();
const address = `0x${wallet.getAddress().toString('hex')}`;

console.log(`Address: ${address}`);

如果您已經生成了一個等同於私鑰的種子,那麼您可能可以從乙太坊的 GitHub 儲存庫中獲得您想要的其餘內容。( BIP-39 JS 程式碼中可能提供了相同的功能。)

類似於以下內容:

var utils = require('ethereumjs-util')
var privateKey = new Buffer(<from_seed>)
var publicKey = utils.privateToPublic(privateKey).toString('hex')
var address = utils.privateToAddress(privateKey).toString('hex')

編輯:

以上假設您已經從助記詞中生成了一些派生的私鑰。從原始的 BIP-39 助記符到上述內容有點複雜。(我可能沒有資格就 JS 程式碼給出一個體面的答案……有人可能有比下面更好的方法。正如@smarx 所說,你的最終目標是什麼也不清楚。)

簡而言之 - 從index.jsBIP-39 JS 程式碼中 - 你需要:

  • 獲取推導路徑 ( getDerivationPath())
  • 計算 BIP32 擴展密鑰 ( calcBip32ExtendedKey())
  • 獲取密鑰 ( bip32ExtendedKey.derive())
  • 由此,得到密鑰對 ( key.keyPair)

然後你可以直接得到你的價值觀:

var privKeyBuffer = keyPair.d.toBuffer(32);
privkey = privKeyBuffer.toString('hex');
var addressBuffer = ethUtil.privateToAddress(privKeyBuffer);
var hexAddress = addressBuffer.toString('hex');
var checksumAddress = ethUtil.toChecksumAddress(hexAddress);
address = ethUtil.addHexPrefix(checksumAddress);
privkey = ethUtil.addHexPrefix(privkey);
pubkey = ethUtil.addHexPrefix(pubkey);

以上內容至少可以讓您了解在哪裡可以走得更遠。

引用自:https://ethereum.stackexchange.com/questions/39384