Web3j創(chuàng)建錢包的2種方式的對比

今天和大家說說創(chuàng)建錢包的2種方式的對比蚕脏。

關(guān)于BIP


在創(chuàng)建錢包之前,我建議你先了解一下BIP32,BIP39,BIP44.
這一部分,我先不細講回挽,后面會專門寫一篇關(guān)于BIP協(xié)議的,大家先簡單了解下猩谊。

BIP 全名是 Bitcoin Improvement Proposals千劈,是提出 Bitcoin 的新功能或改進措施的文件∨平荩可由任何人提出墙牌,經(jīng)過審核后公布在 bitcoin/bips 上。BIP 和 Bitcoin 的關(guān)系暗甥,就像是 RFC 之于 Internet喜滨。

而其中的 BIP32,BIP39,BIP44共同定義了目前被廣泛使用的 HD Wallet。

創(chuàng)建錢包的步驟


創(chuàng)建的錢包的流程為:

  • 1撤防、隨機生成一組助記詞
  • 2虽风、生成 一個種子seed
  • 3、根據(jù)seed生成公鑰、私鑰辜膝、地址
  • 4陌凳、根據(jù)公鑰、 私鑰内舟、 密碼生成錢包文件合敦,也就是Keystore
    /**
     * generate a random group of mnemonics
     * 生成一組隨機的助記詞
     */
    private String generateMnemonics() {
        StringBuilder sb = new StringBuilder();
        byte[] entropy = new byte[Words.TWELVE.byteLength()];
        new SecureRandom().nextBytes(entropy);
        new MnemonicGenerator(English.INSTANCE)
                .createMnemonic(entropy, sb::append);
        return sb.toString();
    }
   /**
     * 
     * 根據(jù)助記詞和密碼生成種子seed
     */
byte[] seed = new SeedCalculator().calculateSeed(generateMnemonics(), "");
    /**
     * 
     * 根據(jù)seed生成公鑰充岛、私鑰等
     */
  ECKeyPair ecKeyPair = ECKeyPair.create(Sha256.sha256(seed));
  Numeric.toHexStringWithPrefix(ecKeyPair.getPrivateKey());
  Numeric.toHexStringWithPrefix(ecKeyPair.getPublicKey());
  //根據(jù)公鑰或者ECKeyPair獲取錢包地址
  String address = Keys.getAddress(ecKeyPair);
   /**
     * 
     * 根據(jù)公鑰 私鑰 密碼 得到 生成錢包文件keystore 
     */
 WalletFile walletFile = Wallet.createLight(password, keyPair);

第1,2步參考BIP39

這種方案算是正規(guī)流程中較為簡潔的一種耕蝉,很多項目大概也是這種思路,最多生成ECKeyPair那里略有差異垒在。

另外一種簡潔的方案

但是我在網(wǎng)上很多博客充斥著另外一種方案蒜魄,這種方案生成錢包文件特別簡單,但是我研究一番场躯,發(fā)現(xiàn)是有問題的谈为。

//第一個參數(shù)是密碼,第二個參數(shù)是錢包存放的路徑
Bip39Wallet wallet = WalletUtils.generateBip39Wallet("password",file)
//生成12個單詞的助記詞
String memorizingWords = wallet.getMnemonic();
//通過錢包密碼與助記詞獲得錢包地址踢关、公鑰及私鑰信息
Credentials credentials = WalletUtils.loadBip39Credentials(walletPwd,
wallet.getMnemonic());
String address = credentials.getAddress()伞鲫;
String publicKey = credentials.getEcKeyPair().getPublicKey().toString(16);

因為大多平臺生成錢包時,在seed這里對其設(shè)置均為空字符串.签舞,如果使用用戶輸入的密碼作為其密碼,這將使得錢包不能通用


通過查閱generateBip39Wallet()這個方法的源碼發(fā)現(xiàn)在生成種子seed的時候秕脓,它使用了生成助記詞(也就是我們創(chuàng)建錢包)的那個密碼,這就有問題了儒搭。

大家可以對比一下吠架,通過助記詞生成種子seed的那句代碼,我的第二個參數(shù)搂鲫,也就是密碼傍药,設(shè)置的是空字符串

   /**
     * 
     * 根據(jù)助記詞和密碼生成種子seed
     */
byte[] seed = new SeedCalculator().calculateSeed(generateMnemonics(), "");

這里有個注意點: byte[] seed = new SeedCalculator().calculateSeed(mnemonics, "")這里的""是BIP39的密碼,.目前大多平臺生成錢包時對其設(shè)置均為空字符串,只有少數(shù)平臺生成錢包使用用戶輸入的密碼作為其密碼,這將使得錢包不能通用。

說到這里大家懂了吧默穴,為了保證錢包的通用性怔檩,也就是說生成的助記詞、私鑰可以在別的錢包導入使用蓄诽,那么你需要在生成seed的時候薛训,把這個bip39密碼設(shè)置為空密碼。

也正是因為目前大多平臺生成錢包時對其設(shè)置均為空字符串,所以我們通過助記詞仑氛、私鑰導入錢包的時候乙埃,是不需要密碼的闸英,讓你填寫的那個密碼是重新設(shè)置的一個新密碼。

好像突然間知道為什么私鑰和助記詞那么重要了介袜,因為別人不需要密碼就能控制你錢包的資產(chǎn)甫何。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市遇伞,隨后出現(xiàn)的幾起案子辙喂,更是在濱河造成了極大的恐慌,老刑警劉巖鸠珠,帶你破解...
    沈念sama閱讀 219,188評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件巍耗,死亡現(xiàn)場離奇詭異,居然都是意外死亡渐排,警方通過查閱死者的電腦和手機炬太,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,464評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來驯耻,“玉大人亲族,你說我怎么就攤上這事】筛浚” “怎么了霎迫?”我有些...
    開封第一講書人閱讀 165,562評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長城看。 經(jīng)常有香客問我,道長测柠,這世上最難降的妖魔是什么轰胁? 我笑而不...
    開封第一講書人閱讀 58,893評論 1 295
  • 正文 為了忘掉前任赃阀,我火速辦了婚禮擎颖,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘驮俗。我一直安慰自己允跑,他們只是感情好搪柑,可當我...
    茶點故事閱讀 67,917評論 6 392
  • 文/花漫 我一把揭開白布工碾。 她就那樣靜靜地躺著渊额,像睡著了一般垒拢。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上舱权,一...
    開封第一講書人閱讀 51,708評論 1 305
  • 那天宴倍,我揣著相機與錄音,去河邊找鬼仓技。 笑死鸵贬,一個胖子當著我的面吹牛阔逼,可吹牛的內(nèi)容都是我干的地沮。 我是一名探鬼主播,決...
    沈念sama閱讀 40,430評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼危融,長吁一口氣:“原來是場噩夢啊……” “哼吉殃!你這毒婦竟也來了楷怒?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,342評論 0 276
  • 序言:老撾萬榮一對情侶失蹤抱完,失蹤者是張志新(化名)和其女友劉穎冶共,沒想到半個月后每界,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體眨层,經(jīng)...
    沈念sama閱讀 45,801評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡上荡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,976評論 3 337
  • 正文 我和宋清朗相戀三年酪捡,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片捺疼。...
    茶點故事閱讀 40,115評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡永罚,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出官扣,到底是詐尸還是另有隱情羞福,我是刑警寧澤,帶...
    沈念sama閱讀 35,804評論 5 346
  • 正文 年R本政府宣布卖陵,位于F島的核電站张峰,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜嗦哆,卻給世界環(huán)境...
    茶點故事閱讀 41,458評論 3 331
  • 文/蒙蒙 一老速、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧橘券,春花似錦卿吐、人聲如沸锋华。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,008評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽纳猫。三九已至,卻和暖如春尚骄,著一層夾襖步出監(jiān)牢的瞬間侵续,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,135評論 1 272
  • 我被黑心中介騙來泰國打工乃沙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留诗舰,地道東北人。 一個月前我還...
    沈念sama閱讀 48,365評論 3 373
  • 正文 我出身青樓蜀铲,卻偏偏與公主長得像记劝,于是被迫代替她去往敵國和親族扰。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,055評論 2 355

推薦閱讀更多精彩內(nèi)容